データの一覧表示
あとで参考ページとか追記する予定。 データの一覧表示には何種類かファイルが必要(モデル、ビュー、テンプレート、URLディスパッチャー)。 それぞれこんな感じで用意する。
モデル
# models.py
from django.db import models
class Bocho(models.Model):
name = models.TextField()
court = models.TextField()
date = models.DateField()
....
モデルではフィールドとその属性を決める。このコードではクラスの中でMetaクラスを定義すると、モデルのテーブル名とかそういうのを色々定義出来るみたい。定義出来るフィールドの種類はDjangoのマニュアルに書いてあるのですぐ分かる。
ビュー
データをテンプレートに設定する部分。リクエストパラメータから、必要なデータを取得する部分。多分。
# views.py
from django.shortcuts import render
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
from bocho.models import Bocho
def index(request): #requestはHttpRequestオブジェクト
objects = Bocho.objects.order_by("-date")
paginator = Paginator(objects,10) #10行毎にページング
page=request.GET.get('page',1) #GETパラメータからページ番号を取得(初期値は1)
try:
object_list = paginator.page(page) #ここでページング
except PageNotAnInteger:
object_list = paginator.page(1) #変なページ番号なら1ページ目
except EmptyPage:
object_list = paginator.page(paginator.num_pages) #存在しないページ番号なら最後のページ
return render(request, 'list.html', {'object_list':object_list})
参考リクエストオブジェクトとレスポンスオブジェクト — Django v1.0 documentation
テンプレート
bocho/templates/list.htmlを作る。中身は一部だけ。{% raw %}{{ 変数名 }}{% endraw %}でビューで割り当てた変数を表示する。 あと、色々テンプレート用のタグがある。これもDjangoマニュアルを見ると分かる。
# list.html
<table class="table">
<thead><th class="span2">日付</th><th>名称</th><th>裁判所</th></thead>
{% for object in object_list %}
<tr>
<td>{{ object.date|date:"Y-m-d" }}</td>
<td>{{ object.name }}</td>
<td>{{ object.court }}</td>
</tr>
{% endfor %}
</table>
URLディスパッチャー
ドメイン名/bocho/で一覧表示出来るように正規表現使ってviewsに割り当てる。
myproject/urls.py
# urls.py
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'pycourt.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'bocho/^', include('bocho.urls',namespace='bocho')), #url(正規表現, 別のurlsに投げる設定。ここではbocho/urls.pyに投げる)
)
bocho/urls.pyは無いので作る。
# urls.py
from django.conf.urls import patterns, include, url
from bocho import views
urlpatterns = patterns('',
url(r'^$', views.index, name="index"), #url(正規表現, 割り当てるビュー, URL作ったりリダイレクトする時に付けておくと便利な名前)
)
一覧はどうせページングするので、views.pyはこの形で覚えておくと良いかも
ページング
どうせbootstrapを使うのでdjango-bootstrap-toolkitを使う方法を載せる。 ページ分けする対象をobject_list、ページ送りのURLにpage=以外に設定するパラメータをreqとすると、
# list.html
{% load bootstrap_toolkit %}↲
{% bootstrap_pagination object_list align="center" extra=req %}
と設定しておけば良い。
ページングにパラメータを付ける
ついでにメモ 例えば"date=2001-01-01"みたいなパラメータを設定したいんだけど、割り当ててる変数?は日付オブジェクトの場合
# list.html
{% bootstrap\_pagination object\_list align="center" extra=date|date:"Y-m-d"|s tringformat:"%date=%s"|slice:"1:" %}
こんな感じで文字列をくっつけてパラメータにすることが出来る。かなり強引参考