データの一覧表示

あとで参考ページとか追記する予定。 データの一覧表示には何種類かファイルが必要(モデル、ビュー、テンプレート、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:" %}

こんな感じで文字列をくっつけてパラメータにすることが出来る。かなり強引参考