在Django 1中,我曾经有过以下URL映射:
...
url(r'^main/', include('main.urls', namespace='main')),
url(r'.*', include('main.urls'))
r'.*'
映射始终位于最后一行,以处理未映射的各种URL。
在Django 2中,使用以下映射:
path('main/', include('main.urls', namespace='main')),
re_path('.*', include('main.urls')),
虽然它也有效,但Django抱怨道:
?: (urls.W005) URL namespace 'main' isn't unique. You may not be able to reverse all URLs in this namespace
为第二个映射提供另一个命名空间不起作用。任何解决方案?
答案 0 :(得分:1)
尝试编写视图以重定向到main /然后在您的网址中包含该视图:
re_path('.*', views.redirect_view)
答案 1 :(得分:0)
在这种情况下,您可以使用django.views.generic.base.RedirectView
简单地重定向到所述网址,而无需导入两次。
urlpatterns = [
path('main', include('main.urls')),
re_path('.*', RedirectView.as_view(url='main/your_default_url_in_main_url'), name='main'),
]
尝试删除'main/'
的尾部斜杠并更改为'main'
。
注意:如果您的main.urls
看起来像这样
urlpatterns = [
path('/whatever1', view1),
path('/whatever2', view2),
]
您必须选择RedirectView.as_view(url='main/whatever1')
作为默认值重定向到view1
,以选择重定向默认视图的位置。使用'main/whatever2'
作为默认值重定向到view2
参考:RedirectView