Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:namespace不是';t唯一_Django - Fatal编程技术网

Django:namespace不是';t唯一

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

在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

为第二个映射提供另一个命名空间不起作用。任何解决方案?

在这种情况下,您可以使用
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/…
remove
name='main'
删除
name='main'
无效。如果我输入
localhost:8000/main/main/main/..
,则url仍然更改为
localhost:8000/whater/
,控制台显示
GET/whater/
GET/whater/main/
GET/whater/main/
。。。它继续运行,仍然不工作,同样的错误(重复重定向)。