ジャンゴと奏でる 〜数時間でおぼえるDjango〜「もくじ」
[訂正]ファイル名訂正。誤「ulr.py」-> 正「ulrs.py」
entriesにもulr.py
/hoge/jam/urls.pyを次のように書き換えます。
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^entries/', include('entries.urls')), )
/hoge/jam/entries/の中に新しくファイル『urls.py』を作成して次の内容を書きます。*1
from django.conf.urls.defaults import * from entries.models import Entry info_dict = { 'queryset':Entry.objects.all(), } urlpatterns = patterns('', (r'^$', 'django.views.generic.list_detail.object_list', info_dict), )
テンプレート作成
ブログのエントリーを一覧表示するためのテンプレート(html)を新しく作成します。
/hoge/jam/entries/に「templates」ディレクトリを新しく作り、その中にまた「entries」を作ります。そこに新しくファイルentry_list.htmlを作成して次を書き込んでください。
(detailは詳細、updateは編集、deleteは削除へのリンクです。後述します。)
<h3>一覧</h3> {% for entry in object_list %} <dt> <a href="/entries/detail/{{ entry.id }}">{{ entry.title }}</a> </dt> <dd> {{ entry.content }} </dd><br /> <dd class="operation"> <a href="/entries/update/{{ entry.id }}">編集</a> <a href="/entries/delete/{{ entry.id }}">削除</a> </dd> <hr /> {% endfor %}
Webブラウザで確認
確認用Webサーバを立ち上げてブラウザで確認してみましょう。
アドレスはhttp://127.0.0.1:8000/entries/です。
ひとつも記事がないので真っ白な画面になってしまいました。
記事を追加できるように
/hoge/jam/entries/urls.pyに次の部分をを追加修正します。 (r'^create/$', 〜 /entries/'}),
urlpatterns = patterns('', (r'^$', 'django.views.generic.list_detail.object_list', info_dict), (r'^create/$', 'django.views.generic.create_update.create_object', {'model':Entry, 'post_save_redirect':'/entries/'}), )
それから、テンプレートjam/entries/templates/entries/entry_form.htmlを新しく作成します。
<h3>新規作成</h3><br/> {% if form.has_errors %} {% for field in form.fields %} {% if field.error %} {{ field.error }} {% endif %} {% endfor %} {% endif %} <div class="validation"> <form action="." method="post" accept-charset="utf-8"> <label for="id_title">タイトル</label>{{ form.title }} {% if form.title.errors %} <p><error> {{ form.title.errors|join:", "}}</error></p>{% endif %}<br/><br/> <label for="id_content">内容</label>{{ form.content }} {% if form.content.errors %} <p><error> {{ form.content.errors|join:", "}}</error></p><br/><br/>{% endif %} <p><input type="submit" value="保存" /></p><br/> </form> </div> <div class="operation"> <a href="/entries/">一覧に戻る</a> </div>
詳細表示
タイトルをクリックで詳細を表示させます。
/hoge/jam/entries/urls.pyに次の部分を追加修正してください。(r'^detail/ 〜 info_dict),
urlpatterns = patterns('', (r'^$', 'django.views.generic.list_detail.object_list', info_dict), (r'^create/$', 'django.views.generic.create_update.create_object', {'model':Entry, 'post_save_redirect':'/entries/'}), (r'^detail/(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict), )
/hoge/jam/entries/templates/entries/entry_detail.htmlを新しく作成。
<dt> {{ object.title }} </dt> <dd> {{ object.content}} </dd><br /> <dd div class="operation"> <a href="/entries/update/{{ object.id }}">編集</a> <a href="/entries/delete/{{ object.id }}">削除</a> </dd><br /> <dd div class="operation"> <a href="/entries/">一覧に戻る</a> </dd>
編集できるように
追加したエントリーを修正したい時に、編集できるようにします。
/hoge/jam/entries/urls.pyに次の部分を追加修正してください。 (r'^update/ 〜 {'model':Entry}),
urlpatterns = patterns('', (r'^$', 'django.views.generic.list_detail.object_list', info_dict), (r'^create/$', 'django.views.generic.create_update.create_object', {'model':Entry, 'post_save_redirect':'/entries/'}), (r'^detail/(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict), (r'^update/(?P<object_id>\d+)/$', 'django.views.generic.create_update.update_object', {'model':Entry}), )
新規作成画面を流用
新規作成画面のテンプレートを流用するので
/hoge/jam/entries/templates/entries/entry_form.htmlの
<h3>新規作成</h3><br/>
の部分を以下に書き換えてください。
{% if object %} <h3>編集</h3><br/> {% else %} <h3>新規作成</h3><br/> {% endif %}
これで編集できるようになりました。
削除機能を追加
/hoge/jam/entries/urls.pyに次の部分を追加修正してください。 (r'^delete/ 〜 /entries/'}),
urlpatterns = patterns('', (r'^$', 'django.views.generic.list_detail.object_list', info_dict), (r'^create/$', 'django.views.generic.create_update.create_object', {'model':Entry, 'post_save_redirect':'/entries/'}), (r'^detail/(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict), (r'^update/(?P<object_id>\d+)/$', 'django.views.generic.create_update.update_object', {'model':Entry}), (r'^delete/(?P<object_id>\d+)/$', 'django.views.generic.create_update.delete_object', {'model':Entry,'post_delete_redirect':'/entries/'}), )
削除用テンプレート作成
/hoge/jam/entries/templates/entries/entry_confirm_delete.htmlを新しく作成。
entry_confirm_delete.html
<form method="post" action="."> <p>削除します。よろしいですか?</p><br /> <input type="submit" /> <input type="button" value="いいえ" onClick="location.href='/entries/'" /> </form><br /> <div class="operation"> <a href="/entries/">一覧に戻る</a> </div>
Webブラウザで確認
http://127.0.0.1:8000/entries/から記事の下にある「削除」をクリックして確認してみましょう。
ここで「実行」ボタンを押すと削除されます。
これで基本的な一通りの機能が出来上がりました。