Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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

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
Python Django URL名称空间';管理员';isn';这不是独一无二的。对于带斜杠和不带斜杠的端点_Python_Django_Url_Request - Fatal编程技术网

Python Django URL名称空间';管理员';isn';这不是独一无二的。对于带斜杠和不带斜杠的端点

Python 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

我收到了这个警告,我想摆脱它。。。 我的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 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]+)/$', ...),