0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

技術書一冊やり込もうAdvent Calendar 2024

Day 13

Django プロフェッショナル webプログラミング #2 -viewで変数を扱う-

Last updated at Posted at 2024-12-12

※以下の企画です

前回に続いてpart2の続きをやっていきます。
今回はviewに関する内容っぽいです。Djangoは実務でもいろいろ書いているのですが、なんとなくで書いている部分も恥ずかしながら多いので、しっかり復習していきます…

Part2②

URLディスパッチャ

本書の流れに従って、Hello Worldをブラウザに表示するまでの流れを進めている。
その中で、"2つの"URLディスパッチャの説明が大事だと思ったのでざっくりまとめてみる。

パス 説明
config/urls.py 親のurl的な存在。まずはこれが参照される
apps/urls.py 子のurl的な存在。親から引き渡される

ということで、今までは漠然と「urls.pyが2つある」としか思っていなかったもののなんとなく解像度が上がった。
これくらい本を読まずとも調べろよというツッコミは一旦受け付けません

具体的なコードも示しておく。

config/urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('', include('first_app.urls')),
    path('admin', admin.site.urls)
]
apps/urls.py
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.pypath()にしたがって、""のURLに対してはviews.indexが呼び出される。といった感じ。
adminとかはconfigの方に指定があるから入れるのね。
大事なことをちゃんと学べた気がする。

viewで変数を扱う

views.pyで指定した変数やURLのパラメータの値を取得する方法をまとめる。
テンプレートとかが絡んでくるとややこしくなるので、この基本をまず忘れないように…

views.py
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)
apps/urls.py
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)の形式で表示されている。
スクリーンショット 2024-11-28 7.35.00.png

まとめ

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?