以前のページで urls.py には複数の書き方があることについて言及した.ここではその詳細を確認しておく.まず次の「書き方1」では,3行目で from . import views
によって views.py モジュールを読み込んでいる.しかしながら views.py モジュールを読み込んでいるだけであるので,views.py で定義されている CommentIndexView
クラス(あるいは views.py で定義された関数)を呼び出すためには,7行目のように views.CommentIndexView
と記述しなければならない.
comments/urls.py(書き方1)
from django.urls import path
from . import views
app_name = 'comments'
urlpatterns = [
path('', views.CommentIndexView.as_view(), name='index'),
path('<int:pk>/', views.ShowCommentView.as_view(), name='show'),
]
CommentIndexView
を利用するたびに views.
をつけることが面倒であれば,次の「書き方2」のように from .views import CommentIndexView, ShowCommentView
書いて,views.
を省略することもできる.しかしながら,7, 8行目のように url を追加するたびに3行目にも追加をする必要があるので注意が必要である.
comments/urls.py(書き方2)
from django.urls import path
from .views import CommentIndexView, ShowCommentView
app_name = 'comments'
urlpatterns = [
path('', CommentIndexView.as_view(), name='index'),
path('<int:pk>/', ShowCommentView.as_view(), name='show'),
]
さらに,次の「書き方3」のようにするとかなり省力化が可能になる.しかしながらこのような書き方は非推奨である.なぜなら,複数のモジュールで同じ名前のクラス(や関数)があると意図しないクラス(や関数)が呼び出される可能性があるからである.
comments/urls.py(書き方3)
from django.urls import path
from .views import *
app_name = 'comments'
urlpatterns = [
path('', CommentIndexView.as_view(), name='index'),
path('<int:pk>/', ShowCommentView.as_view(), name='show'),
]
なお,この資料では今後「書き方1」を用いることとする.またさらなる詳細はここを参照してください.