はじめてのDjangoアプリ作成(その3)

[ 関連エントリ ]
その1 : プロジェクト作成 & モデル作成
その2 : admin サイトの使い方
その3 : ビュー & テンプレートを作る(照会画面)
その4 : フォームを作る(入力画面)

[ 参考サイト ]
Django ドキュメントはじめての Django アプリ作成、その 3

――――――――

■ テンプレートファイルの配置場所を決める。

(01) ファイル「settings.py」を編集。テンプレートフォルダの場所を記述する。

import os
BASE_PATH = os.path.dirname(os.path.abspath('_FILENAME_'))
 
TEMPLATE_DIRS = (
    os.path.join(BASE_PATH, 'templates')
)

(02) テンプレートフォルダを作成。

■ URL構造の設計

(01) ファイル「urls.py」を編集。URLの構造を記述する。

urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
    (r'^polls/$', 'mysite.polls.views.index'), # ★ 追記
    (r'^polls/(?P<poll_id>\d+)/$', 'mysite.polls.views.detail'), # ★ 追記
    (r'^polls/(?P<poll_id>\d+)/results/$', 'mysite.polls.views.results'), # ★ 追記
    (r'^polls/(?P<poll_id>\d+)/vote/$', 'mysite.polls.views.vote'), # ★ 追記
)

(02) ファイル「views.py」を編集。URLアクセス時の動作を記述する。

from django.shortcuts import render_to_response, get_object_or_404
from mysite.polls.models import Poll
 
def index(request):
    latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
    return render_to_response('polls/index.html', {'latest_poll_list': latest_poll_list})
 
def detail(request, poll_id):
    p = get_object_or_404(Poll, pk=poll_id)
    return render_to_response('polls/detail.html', {'poll': p})
 
def results(request): # ★ 暫定
    pass
 
def vote(request): # ★ 暫定
    pass

(03) ファイル「index.html」を作成。テンプレートフォルダ配下に配置する。

{% if latest_poll_list %}
    <ul>
    {% for poll in latest_poll_list %}
        <li>{{ poll.question }}</li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

(04) ファイル「detail.html」を作成。テンプレートフォルダ配下に配置する。

<h1>{{ poll.question }}</h1>
<ul>
{% for choice in poll.choice_set.all %}
    <li>{{ choice.choice }}</li>
{% endfor %}
</ul>

(05) ブラウザにて「http://localhost:8000/polls/」にアクセス。テンプレートの反映を確認。

(06) ブラウザにて「http://localhost:8000/polls/[存在するpoll_id]/」にアクセス。テンプレートの反映を確認。

(07) ブラウザにて「http://localhost:8000/polls/[存在しないpoll_id]/」にアクセス。404画面が表示されることを確認。