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

时间:2017-06-12 07:45:37

标签: python django django-admin django-urls

我正在关于Django 1.10的网站上工作,我正在尝试设置我的管理站点,因此URL位于" / pcari / admin"而不是" / admin"

这是我的根urls.py:

child_uid

这是我的app urls.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')),
]

如果我访问" 127.0.0.1:8000 / pcari / admin"这个设置技术上就可以了。我得到了管理站点,但如果我访问" 127.0.0.1:8000 / admin"我也会得到管理站点,这是我不想要的。

但是,如果我删除" url(r' ^ admin /',admin.site.urls),"来自根urls.py文件的行,当我尝试访问" 127.0.0.1:8000 / pcari / admin":

时出现一个奇怪的错误
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'),

    ...

]

2 个答案:

答案 0 :(得分:1)

在主urls.py

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

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

并从应用网址中删除管理网址

答案 1 :(得分:0)

但是,如果我删除" url(r' ^ admin /',admin.site.urls),"来自根urls.py文件的行,当我尝试访问" 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:

<强>原因:

当您从主urls.py中删除url(r'^admin/', admin.site.urls),时,这意味着您没有任何管理员命名空间,因为此行已注册&#34; admin&#34;在django代码中定义的命名空间。 https://github.com/django/django/blob/master/django/contrib/admin/sites.py#L279

此行显示django admin将注册为&#34; admin&#34;命名空间

当您在&#34; pcari&#34;中删除并添加管理网站时应用程序,这意味着这个应用程序是注册名称空间&#34; pcari&#34;。但是在django管理模板中有像{%url admin:index%}这样的模板中的硬编码网址,它给出了NoReverseMatch异常 https://github.com/django/django/blob/master/django/contrib/admin/templates/admin/base.html#L44 django模板中存在导致错误的硬编码管理命名空间

修改

您在应用网址中添加了

app_name = 'pcari'

创造了这个Noreverse问题。删除此应用名称行。因为如果你添加它,它将作为pacri命名空间。