Python Django URL名称空间';管理员';isn';这不是独一无二的。对于带斜杠和不带斜杠的端点
我收到了这个警告,我想摆脱它。。。 我的URL.pyPython Django URL名称空间';管理员';isn';这不是独一无二的。对于带斜杠和不带斜杠的端点,python,django,url,request,Python,Django,Url,Request,我收到了这个警告,我想摆脱它。。。 我的URL.py urlpatterns = [ path('admin/', admin.site.urls), path('admin', admin.site.urls), re_path(r'^(?P<Model>[A-Za-z]+)', GenericViewSet.as_view({'get': 'list', 'post': 'create'}), ) # aka model endpo
urlpatterns = [
path('admin/', admin.site.urls),
path('admin', admin.site.urls),
re_path(r'^(?P<Model>[A-Za-z]+)',
GenericViewSet.as_view({'get': 'list', 'post': 'create'}),
) # aka model endpoint
]
对
/admin
和/admin/
的两个请求都正确地落在管理页面上。我现在看到问题了。如果您只设置了admin/
,而没有设置admin
,这将与正则表达式匹配
从附加斜杠
(强调我的):
…如果请求URL与URLconf中的任何模式不匹配,并且没有以斜杠结尾,则会向同一URL发出HTTP重定向,并附加斜杠
因此,django没有将admin
重定向到admin/
,因为您的正则表达式模式与admin
匹配,因为表达式末尾不包含斜杠
您应该在正则表达式模式中指定斜杠和美元符号,以便django将完整url与斜杠匹配
这应该起作用:
path('admin/', admin.site.urls),
re_path(r'^(?P<Model>[A-Za-z]+)/$', ...),
路径('admin/',admin.site.url),
re_路径(r'^(?P[A-Za-z]+)/$,…),
默认情况下,Django将非斜杠URL重定向到斜杠URL,即
/admin
重定向到/admin/
。您不需要两个URL。请参阅设置。问题在于,当我只设置路径('admin/',admin.site.url)时,对/admin的请求会落到模型端点,而当我只设置路径('admin',admin.site.url)时,对/admin/的请求会落到模型端点。这不应该发生。。。这可能是真正的问题。问题在于,当我只设置路径('admin/',admin.site.url)时,对/admin的请求落到模型端点,而当我只设置路径('admin',admin.site.url)时,对/admin/的请求落到模型端点。我明白了为什么会发生这种情况,Django在将斜杠添加到端点之前会遍历所有端点,然后用附加的斜杠再次遍历它们。@Charlestone是的,我理解。因此,我建议您在正则表达式模式中添加斜杠。我在我的计算机上测试了一个类似的场景,它似乎为我解决了这个问题。
path('admin/', admin.site.urls),
re_path(r'^(?P<Model>[A-Za-z]+)/$', ...),