문제 발생
# video/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.video_list, name='video_list'),
path('<category>/', views.video_category, name='video_category'), # url 추가
path('<int:pk>/', views.video_detail, name='video_detail'),
path('new/', views.video_new, name='video_new'),
path('<int:pk>/delete', views.video_delete, name='video_delete'),
path('signup/', views.signup, name='user_signup'),
path('login/', views.signin, name='user_login'),
path('logout/', views.signout, name='user_logout'),
path('like/', views.video_like, name='video_like'),
path('myVideo/', views.my_video, name='my_video'),
path('likeVideo/', views.like_video, name='like_video'),
]
category string을 받길 원했는데, 이렇게 되니 모든 url이 추가된 url로 라우팅되는 문제가 발생했다.
문제 해결 과정
그래서, string이라는걸 명시해주지 않아서 그런가해서 해봤는데,
path('<str:category>/', views.video_category, name='video_category'), # str: 추가
같은 문제가 발생하였고,
template에서 url name을 잘못 사용했나 싶어 확인했는데 아니었고,
결국, url pattern을 매칭하는데 있어 video_category가 위에 있어서 가장 먼저 매칭되는 것이라는 결론밖엔 나오지 않았다.
그래서 video_category url을 맨 아래에 위치시켰더니 의도한대로 작동하기 시작하였다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.video_list, name='video_list'),
path('<int:pk>/', views.video_detail, name='video_detail'),
path('new/', views.video_new, name='video_new'),
path('<int:pk>/delete', views.video_delete, name='video_delete'),
path('signup/', views.signup, name='user_signup'),
path('login/', views.signin, name='user_login'),
path('logout/', views.signout, name='user_logout'),
path('like/', views.video_like, name='video_like'),
path('myVideo/', views.my_video, name='my_video'),
path('likeVideo/', views.like_video, name='like_video'),
path('<str:category>/', views.video_category, name='video_category'), # I'm here!
]
결론
url name의 개념에 대해 잘못 알고 있었단 사실을 알게 되었다.
template에서 매칭되는 url name으로 바로 라우팅되는 것으로 알고 있었는데,
pattern 매칭을 먼저 확인한다는 것을 알 수 있었다.
더 나은 방법으로 url을 정의하고, 사용하는 방법에 대해 알아봐야겠다!
'Python > Django' 카테고리의 다른 글
[Django ORM] QuerySet 수정을 통해 성능 향상시키기 / SQL Queries 중복 줄이기 / select_related, prefetch_related (0) | 2020.04.29 |
---|---|
[Django Test] Django Unit Test (업데이트 중...2020/04/28) (0) | 2020.04.28 |
[Django template] template 확장하기 / base.html 분리를 통해 html 재사용성 향상 (0) | 2020.04.27 |
[Django] form을 활용하여 login view 수정하기 (0) | 2020.04.25 |
[Django] Secret key 새로 생성 후 분리하기 (0) | 2020.04.24 |