| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==Django 最初のアプリケーション 3 (Viewの作成)==
[[Django 最初のアプリケーション 4]] Django][Python][[[前|Django 最初のアプリケーション 2]]][[[次]]
Pythonの概要も分かり易い.
===方針===
<&lt;blockquote>&gt;Djangoアプリケーションにて、ビューは、Webページの『型』であり、特定の機能や、テンプレートを提供する。<&lt;/blockquote>&gt;
=====たとえば、ブログアプリケーションでは以下のようなビュー。=====
*ホームページ - 最新の2、3のエントリを表示
*投票ページ - 特定の調査に対する投票を選択する
<&lt;blockquote>&gt;Djangoではビューをシンプルな Pythonの関数で表現する<&lt;/blockquote>&gt;
===URLの設計===
# (r'^mysite/', include('mysite.foo.urls')),
(r'^polls/$', 'mysite.polls.views.index'),
(r'^polls/(?P<&lt;poll_id>&gt;\d+)/$', 'mysite.polls.views.detail'), (r'^polls/(?P<&lt;poll_id>&gt;\d+)/results/$', 'mysite.polls.views.results'), (r'^polls/(?P<&lt;poll_id>&gt;\d+)/vote/$', 'mysite.polls.views.vote'),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
====リクエストパラメータの解析====
上記の例では、"/polls/23/"というリクエストがあった場合、DjangoはPythonモジュールをロードする。これは、r'^polls/(?P<&lt;poll_id>&gt;\d+)/$' にマッチするためであり、 mysite/polls/views.py.からdetail()関数が以下のように呼び出される。 detail(request=<&lt;HttpRequest object>&gt;, poll_id='23')*poll_id='23' の部分は、(?P<&lt;poll_id>&gt;\d+)から来ている
*丸括弧でパターンをを囲うことにより、テキストの一致を『捕捉』しビュー関数に引数として送信する。
*?P<&lt;poll_id> &gt; がパターンにマッチした場合の名称を定義している。
*\d+ は正規表現で数字の連続
'''index.html'''
{% if latest_poll_list %}
<&lt;ul>&gt;
{% for poll in latest_poll_list %}
<&lt;li>&gt;{{ poll.question }}<&lt;/li>&gt;
{% endfor %}
<&lt;/ul>&gt;
{% else %}
<&lt;p>&gt;No polls are available.<&lt;/p>&gt;
{% endif %}
====テンプレートシステムを利用する====
*detail()ビューは、次のような感じ
<&lt;h1>&gt;{{ poll.question }}<&lt;/h1>&gt; <&lt;ul>&gt;
{% for choice in poll.choice_set.all %}
<&lt;li>&gt;{{ choice.choice }}<&lt;/li>&gt;
{% endfor %}
<&lt;/ul>&gt;
[[File:0378_django_firstapp30.jpg]]
*テンプレートでは、ドット記法で、変数の属性にアクセスできる。{{ poll.question }}のように
urlpatterns = patterns('mysite.polls.vews',
(r'^polls/$', 'index'),
(r'^polls/(?P<&lt;poll_id>&gt;\d+)/$', 'detail'), (r'^polls/(?P<&lt;poll_id>&gt;\d+)/results/$', 'results'), (r'^polls/(?P<&lt;poll_id>&gt;\d+)/vote/$', 'vote'),
)
====分割する====
urlpatterns = patterns('mysite.polls.views',
(r'^$', 'index'),
(r'^(?P<&lt;poll_id>&gt;\d+)/$', 'detail'), (r'^(?P<&lt;poll_id>&gt;\d+)/results/$', 'results'), (r'^(?P<&lt;poll_id>&gt;\d+)/vote/$', 'vote'),
)
[[Django 最初のアプリケーション 4]] [[前|Django 最初のアプリケーション 2]]][[[次]]

案内メニュー