Django:namespace不是';t唯一
在Django 1中,我曾经有以下URL映射:Django:namespace不是';t唯一,django,Django,在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
...
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
为第二个映射提供另一个命名空间不起作用。任何解决方案?在这种情况下,您可以使用
django.views.generic.base.RedirectView
直接重定向到所述url,而无需导入两次
urlpatterns = [
path('main', include('main.urls')),
re_path('.*', RedirectView.as_view(url='main/your_default_url_in_main_url'), name='main'),
]
尝试删除'main/'
的尾部斜杠,并更改为'main'
注意:如果您的main.url
如下所示
urlpatterns = [
path('/whatever1', view1),
path('/whatever2', view2),
]
您必须选择重定向默认视图的位置,方法是提供RedirectView.as_view(url='main/whatever1')
作为默认值重定向到view1
。默认情况下,使用'main/whatever2'
重定向到view2
参考:尝试编写一个视图重定向到main/并将该视图包含在URL中:
re_path('.*', views.redirect_view)
是的,问题与那篇文章相同,但我确实需要包含两次
'main.url'
。或者,是否有任何方法将URL定向到主页面?为什么不编写一个视图,将。*重定向到main/*re\u路径('.*',views.redirect\u view),re\u路径('.*',views.redirect\u view)
!这导致url:localhost:8000/main/main/main/…
removename='main'
删除name='main'
无效。如果我输入localhost:8000/main/main/main/..
,则url仍然更改为localhost:8000/whater/
,控制台显示GET/whater/
,GET/whater/main/
,GET/whater/main/
。。。它继续运行,仍然不工作,同样的错误(重复重定向)。