Python/초간단 장고 Django
URL namespace 'xxx' isn't unique.
컴닥
2021. 6. 28. 06:25
반응형
# board/urls.py
from django.urls import path
from .views import (... 생략 ...)
app_name = 'board'
urlpatterns = [
path('', ArticleList.as_view(), name='index'),
... 생략 ...
]
앞서 만들었던 BBS에서 urls.py에 app_name (템플릿과 urls.py에서 사용할 수 있는 네임스페이스)을 지정하면 다음 경고가 발생한다.
WARNINGS:
?: (urls.W005) URL namespace 'board' isn't unique. You may not be able to reverse all URLs in this namespace
(사용한) URL 네임스페이스가 unique 하지 않다.
당신은 이 네임 스페이스에 있는 모든 URLs를 리버스 할 수는 없을 것이다.
여기서 reverse라는 것은
urls.py에 선언해둔 namespace를 이용하여
URL을 받아와서 사용할 수 있게 해주는 기능이다.
reverse를 사용하면
python 코드에서 URL을 하드 코딩할 필요가 없어지고,
URL이 변경되어도, URL Reverse가 변경된 URL을 추적하게 된다.
이 경고의 원인은 프로젝트의 main 라우터(urls.py)에서
board.urls로 가는 경로를 2개 지정했기 때문이다.
거슬러 올라가면서 URL을 찾다가
합류점(Y 모양이랄까?)이 나오면
어디서 온 것이라 하기 애매해지니까
경고가 나오는 것...
# config/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('board.urls')),
path('admin/', admin.site.urls),
path('board/', include('board.urls'), name='board')
]
해결 방법:
경로를 직접 지정하지 말고 redirect 해주면 된다.
from django.shortcuts import redirect
# path('', include('board.urls')),
path('', lambda request: redirect('board/')),
다만 urls.py에서는 바로 redirect 해줄 수가 없으니..
주로 views.py에서 봤던 redirect를
람다를 사용해서 코딩하면 깔끔하다.
반응형