-
URL namespace 'xxx' isn't unique.Python/초간단 장고 Django 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를
람다를 사용해서 코딩하면 깔끔하다.반응형