Django

[BlogApp] URLconf 2계층으로 코딩하기

eunyeong 2022. 1. 24. 09:19
# mysite/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('bookmark/', include('bookmark.urls')),
    path('blog/', include('blog.urls'))
]

include() 함수를 하용하여 bookmark.urls와 blog.urls로 연결시킵니다.

 

# blog/urls.py


from django.urls import path, re_path

from blog import views

app_name='blog'
urlpatterns = [
    path('', views.PostLV.as_view(), name='index'),
    path('post/', views.PostLV.as_view(), name='post_list'),
    re_path(r'^post(?P<slug>[-\w]+)/$', views.PostDV.as_view(), name='post_detail'),
    path('archive/', views.PostAV.as_view(), name='post_archive'),
    path('archive/<int:year>/', views.PostYAY.as_view(), name='post_year_archive'),
    path('archive/<int:year>/<str:month>/', views.PostMAV.as_view(), name='post_month_archive'),
    path('archive/<int:year>/<str:month>/<int:day>/', views.PostDAV.as_view(), name='post_day_archive'),
    path('archive/today/', views.PostTAV.as_view(), name='post_today_archive'),

]

● app_name='blog'

애플리케이션 namespace를 'blog'로 지정합니다. 애플리케이션 namespace는 URL 패턴의 이름을 정하는 데 사용하고 URL 패턴 이름이 충돌되지 않도록 합니다. 

 

● re_path

한글 슬러그를 위해 re_path를 사용합니다.

그리고 re_path('post/<slug:slug>/', views.PostDV.as_view(), name='post_detail'), 로 지정하면 한글이 포함된 슬러그는 처리를 못합니다. <slug>컨버터는 '[-a-zA-Z0-9]+'만 인식하기 때문입니다.