【67日目】Djangoのpathメソッドにおける「name」とは?_プログラミング学び日記
このnoteは、31歳未経験からエンジニアを目指して勉強していく記録を綴っているものです。現在はAdTechでカスタマーサクセスを担当しつつ、色んなチャンスに恵まれ、CS業務や子育てと並行しながらチャレンジしています。
これからプログラミングを始める方にとってのTipsやモチベアップに繋げられるように頑張りたいと思っています。
--------------------------------------------
後で探しやすいよう、タイトルの構成を今回から少し変えてみました。
作成したTodo管理アプリについて理解を深めるシリーズの続きです。
前回はas_view()メソッドを起点に、DjangoのMTVモデルという設計思想まで遡って学びました。
上記の執筆時に未解決だったurlpatternsのpathメソッドで記載した「name = 」の意味に関してまとめます。
ソースコードはこちらです。
pathメソッドにおける「name」とは?
作成したTodoアプリでは以下のように記載していました。
# アプリのurls.py
from django.urls import path
from .views import TodoList, TodoDetail, TodoCreate, TodoUpdate, TodoDelete
urlpatterns = [
path("", TodoList.as_view(), name="list"),
# 中略
path("delete/<int:pk>", TodoDelete.as_view(), name="delete"),
]
これに対して、pathメソッドの書き方について以下の定義を見つけました。
つまり、nameは何でもいいみたいです。
ではこのnameはどこで使われているのでしょう?
答えは「urlの変数」になっているということでした。
↓例えばtodo_list.htmlのコードに記載しています。
<tbody>
{% for task in tasks %}
<tr>
<td>{{ task.title }}</td>
<td>{{ task.deadline }}</td>
<td>
<a href="{% url 'detail' task.pk %}">詳細</a>
<a href="{% url 'update' task.pk %}">編集</a>
<a href="{% url 'delete' task.pk %}">削除</a>
</td>
</tr>
{% endfor %}
</tbody>
aタグにある'detail'や'update'、'delete'が先ほど「name = 」で定義した変数になっています。例えば'delete'には「"delete/<int:pk>"」が入っています。
URLが変数になっていることで、urls.pyでURLを変更したとしても、html側を編集する必要がないため便利です。
本当はLiteViewクラスについてもまとめる予定でしたが、少し長くなりそうなので次回に持ち越します。
次回記事はこちら↓
よく考えたら今日は大みそかですね。
皆様よいお年をお迎えください!
参考
これまで修了したコース等
【YouTube動画】
Pythonでウェブサービスを作ろう! #1
テンプレートをマスターしよう! #2
静的ファイルを配信しよう !#3
データベースと接続しよう! #5
【Paiza】
Aランクレベルアップメニュー 24/49問
ループメニュー1 20/20問
ループメニュー2 5/20問
配列メニュー 34/64問
条件分岐メニュー 25/25問
二重ループメニュー 19/19問
配列活用メニュー 26/26問
文字列処理メニュー 30/30問
Bランクレベルアップメニュー 62/62問
Cランクレベルアップメニュー 30/30問
ランクB合格
ランクC合格
【書籍/ブログ】
Django入門 | 初心者でも1時間でWebアプリ(Todoアプリ)を作成するコース
基礎からのMySQL 514/514頁
Web技術の基本 189/189頁 ※2周目中
京大のPython教科書 116/201頁
Pythonデータベースプログラミング 194/194頁
Pythonエンジニアファーストブック読了
【Progate】
Python Ⅰ~Ⅴ
Python アプリ版 コースⅠ~Ⅴ
SQL Ⅰ~ Ⅳ
SQL アプリ版 コースⅢ
HTML&CSS 初級編
【その他】
Pythonの環境構築
VSCodeの環境構築
MySQLの環境構築(MAMP)
Git / GitHubの環境構築
この記事が気に入ったらサポートをしてみませんか?