Djangoチュートリアル(5) ビュー
はじめての Django アプリ作成、その 3 | Django ドキュメント | Django
この前はPollsアプリを作ったと言っても
"Hello, World. You're at the polls index."と表示しただけ
ここでもう少し本格的になりそう
Django では、各ページとコンテンツはビューによって提供されます。各ビューは単純に Python 関数 (クラスベースビューの場合はメソッド) として実装されています。
ビューが関数として実装される、といっても
さすがにadminサイトみたいに定義しただけでページができるってことはないよな
こないだも同じこと思ってた気がする
どういう意味だっけ
インターネットサーフィンをしてるときなどに、 「ME2/Sites/dirmod.asp?sid=&type=gen&mod=Core+Pages&gid=A6CD4967199A42D9B65B1B」 のような美しいURLを見かけることがあるでしょう。
あるある
Django はこんなものよりもっとエレガントな 「URLパターン」 を提供していると知っておいてください。
URLパターンは、URLを単に一般化したものです。例えば /newsarchive/<year>/<month>/ などです。
URLからビューにたどり着くために、 Django は 『URLconfs』 として知られているものを使います。
それって
urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', admin.site.urls),
]
とか
urlpatterns = [
url(r'^$', views.index, name='index')
]
とかやったやつだな
polls/views.pyに関数を追加
文字列の書き方は今どき風にfstringで
def detail(request, question_id):
return HttpResponse(f"You're looking at question {question_id}.")
def results(request, question_id):
return HttpResponse(f"You're looking at the results of question {question_id}.")
def vote(request, question_id):
return HttpResponse(f"You're voting on question {question_id}.")
そうかviewは関数、ってそういうことか確かにそのとおり
さてquestion_id
にはどうやって値が入るのか
polls/urls.pyに追加
url(r"^(?P<question_id>[0-9]+)/$", views.detail, name="detail"),
url(r"^(?P<question_id>[0-9]+)/results/$", views.results, name="results"),
url(r"^(?P<question_id>[0-9]+)/vote/$", views.vote, name="vote"),
なるほど(?P)
で指定するわけね
各ビューには二つの役割があります: 一つはリクエストされたページのコンテンツを含む HttpResponse オブジェクトを返すこと、もう一つは Http404 のような例外の送出です。それ以外の処理はユーザ次第です。
ビューはデータベースからレコードを読みだしても、読み出さなくてもかまいません。 Django のテンプレートシステム、あるいはサードパーティの Python テンプ レートシステムを使ってもよいですし、使わなくてもかまいません。 PDF ファイルを生成しても、 XML を出力しても、 ZIP ファイルをその場で生成してもかまいません。 Python ライブラリを使ってやりたいことを何でも実現できます。
HTML/CSS使うときはここでテンプレートが登場するわけだな
はあくした