Python Django管理员站点URL路由问题/不一致

Python Django管理员站点URL路由问题/不一致,python,django,django-admin,django-urls,Python,Django,Django Admin,Django Urls,我正在Django 1.10上的一个网站上工作,我正在尝试设置我的管理员站点,以便URL位于/pcari/admin而不是/admin 以下是我的根URL.py: from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ # Admin site url(r'^admin/', admin.site.urls), # Regular site

我正在Django 1.10上的一个网站上工作,我正在尝试设置我的管理员站点,以便URL位于/pcari/admin而不是/admin

以下是我的根URL.py:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    # Admin site
    url(r'^admin/', admin.site.urls),

    # Regular site
    url(r'^pcari/', include('pcari.urls')),
]
以下是我的应用程序url.py:

from django.conf.urls import url
from django.contrib import admin

from . import views

app_name = 'pcari'
urlpatterns = [
    # Admin site
    url(r'^admin/', admin.site.urls),

    # User-facing views
    url(r'^$', views.index, name='index'),

    ...

]
这个设置在技术上是有效的,如果我访问127.0.0.1:8000/pcari/admin,我会得到管理员站点,但是如果我访问127.0.0.1:8000/admin,我也会得到管理员站点,这是我不想要的


但是,如果从根URL.py文件中删除urlr“^admin/”、admin.site.urls行,则在尝试访问127.0.0.1:8000/pcari/admin时会出现一个奇怪的错误:

NoReverseMatch at /pcari/admin/
u'admin' is not a registered namespace
    Request Method: GET
    Request URL:    http://127.0.0.1:8000/pcari/admin/
    Django Version: 1.10.5
    Exception Type: NoReverseMatch
    Exception Value:    
在主URL.py中

urlpatterns = [
    # Admin site
    url(r'^pcari/admin/', admin.site.urls),

    # Regular site
    url(r'^pcari/', include('pcari.urls')),
]

并从应用程序url中删除管理员url。但是,如果我从根url.py文件中删除urlr“^admin/”、admin.site.urls行,当我尝试访问127.0.0.1:8000/pcari/admin时,会出现一个奇怪的错误:

 NoReverseMatch at /pcari/admin/
    u'admin' is not a registered namespace
        Request Method: GET
        Request URL:    http://127.0.0.1:8000/pcari/admin/
        Django Version: 1.10.5
        Exception Type: NoReverseMatch
        Exception Value:
原因:

当您从main urls.py中删除urlr“^admin/”、admin.site.urls时,这意味着您没有任何管理员命名空间,因为此行注册了django代码中定义的管理员命名空间

此行显示django admin将注册为admin命名空间

当您在pcari应用程序中删除并添加管理站点时,意味着此应用程序是注册命名空间pcari。但在django中,管理模板在类似{%url admin:index%}的模板中有硬代码url,这会导致NoReverseMatch异常 django模板中存在导致错误的硬代码管理命名空间

编辑:

您添加了应用程序内URL

app_name = 'pcari'

这就造成了挪威的问题。删除此应用程序名称行。因为如果添加此项,它将用作pacri命名空间。

为什么不将urlr“^admin/”、admin.site.url更改为urlr“^pcari/admin/”、admin.site.url?我明白了,谢谢!这是否意味着我必须在根目录下有管理页面?是否希望我的管理员页面位于/pcari/admin?请查看更新的答案。从创建命名空间的app url.py中删除app_name=pcari