※以下の企画です
前回に続いてpart2の続きをやっていきます。
今回はviewに関する内容っぽいです。Djangoは実務でもいろいろ書いているのですが、なんとなくで書いている部分も恥ずかしながら多いので、しっかり復習していきます…
Part2②
URLディスパッチャ
本書の流れに従って、Hello Worldをブラウザに表示するまでの流れを進めている。
その中で、"2つの"URLディスパッチャの説明が大事だと思ったのでざっくりまとめてみる。
| パス | 説明 |
|---|---|
| config/urls.py | 親のurl的な存在。まずはこれが参照される |
| apps/urls.py | 子のurl的な存在。親から引き渡される |
ということで、今までは漠然と「urls.pyが2つある」としか思っていなかったもののなんとなく解像度が上がった。
これくらい本を読まずとも調べろよというツッコミは一旦受け付けません。
具体的なコードも示しておく。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('', include('first_app.urls')),
path('admin', admin.site.urls)
]
from django.urls import path
from . import views
app = 'first_app'
urlpatterns = [
path('',views.index, name='index'),
]
上記の例でいうと、パスが""(空白)のurlへアクセスが合った場合は、最初にconfig/urls.pyが参照され、path()に従って'first_app'に引き渡される。
この'first_app'というのが今回のappsにあたり、apps/urls.pyのコードが参照される。
apps/urls.pyのpath()にしたがって、""のURLに対してはviews.indexが呼び出される。といった感じ。
adminとかはconfigの方に指定があるから入れるのね。
大事なことをちゃんと学べた気がする。
viewで変数を扱う
views.pyで指定した変数やURLのパラメータの値を取得する方法をまとめる。
テンプレートとかが絡んでくるとややこしくなるので、この基本をまず忘れないように…
from django.http import HttpResponse
def index(request):
message = "hi!"
return HttpResponse(message)
def page(request, page_id):
message = "ページ"+str(page_id)
return HttpResponse(message)
from django.urls import path
from . import views
app = 'first_app'
urlpatterns = [
path('',views.index, name='index'),
path('page/<int:page_id>/', views.page, name='page'),
]
上記のviews.pyでは、indexでもpageでも変数messageを指定している。
index側はそのまんまなので特に言うことは無いが、pageではpage_idという引数も指定している。
これは続くurls.pyにひも付き、'page/<int:page_id>/'のパスの後半の値がpageに引き渡される。
url側でパラメータを指定する方法はめちゃくちゃ応用が効きそうなので、しっかり抑えたい。
開発用サーバーを立ち上げて内容を確認してみると、以下のようになる。
URLに/page/1と入れると対応するページが表示される。
表示される文字列は、views.py内で定義したようにmessage = "ページ"+str(page_id)の形式で表示されている。

まとめ
今回はとにかくシンプルな部分で、URLディスパッチャとviewで変数を扱う部分を学んだ。
さすがに牛歩すぎるがちゃんと終わるのかこれ。
まぁこんな感じで次回も頑張ります!