Djangoを使用したアプリケーションにて、urlにパラメータを設定し、ビュー側でその値を使用していい感じの処理をしたい場合の方法を、備忘録として残します。
結論
from django.urls import path
from . import views
app_name = 'app_name'
urlpatterns = [
path('', views.IndexView.as_view(), name="index"),
path('result/<str:date>/<str:id>/<str:no>/', views.ResultView.as_view(), name="result"),
]
from django.views import generic
from django.http import HttpResponse
class ResultView(generic.TemplateView):
template_name = "result.html"
def get(self, request, **kwargs):
context = {
'date': kwargs['date'],
'id': kwargs['id'],
'no': kwargs['no'],
}
return self.render_to_response(context)
<body>
<a href="{% url "result:result' 20220901 10 1 %}">LINK</a>
</body>
<body>
<h3>{{ date }}</h3>
<h3>{{ id }}</h3>
<h3>{{ no }}</h3>
</body>
以上で、「https:…./result/20220901/10/1/」にアクセスすると、このように表示される。
もう少し詳しく
噛み砕いて説明します。
ルーティング
urls.pyにて、ルーティングの設定を行います。
from django.urls import path
from . import views
app_name = 'app_name'
urlpatterns = [
path('', views.IndexView.as_view(), name="index"),
path('result/<str:date>/<str:id>/<str:no>/', views.ResultView.as_view(), name="result"),
]
「/result/<任意の文字列>/<任意の文字列>/<任意の文字列>/」というurlパターンにマッチした場合、レンダリング処理をResultViewに依頼しています。
また、それぞれの文字列は date・id・no という名前でビュー側で取り出す事ができます。
ビュー
from django.views import generic
from django.http import HttpResponse
class ResultView(generic.TemplateView):
template_name = "result.html"
def get(self, request, **kwargs):
context = {
'date': kwargs['date'],
'id': kwargs['id'],
'no': kwargs['no'],
}
return self.render_to_response(context)
続いてビューです。
resultページにアクセスした際に、設定したurlパラメータを 10 ~ 12 行目で取り出しています。
さらに、取り出したパラメータを context の格納し、テンプレート側に渡しています。
テンプレート
<body>
<h3>{{ date }}</h3>
<h3>{{ id }}</h3>
<h3>{{ no }}</h3>
</body>
{{}} を使用し、ビューから受け取ったurlパラメータを表示させています。
まとめ
URLパラメータをビューに渡す方法を備忘録がてら纏めました。
他にもさまざまなDjangoに関する記事がございますので、よかったらご覧ください。
コメント