2017-06-12 97 views
-1

我正在Django 1.10上的网站上工作,并且我正在尝试设置我的管理站点,以便URL位于“/ pcari/admin”而不是“/ admin”Django管理站点URL路由问题/不一致

这里是我的根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')), 
] 

这里是我的应用程序urls.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/ PCAR我/管理员“我得到的管理网站,但我也得到管理网站,如果我访问”127.0.0.1:8000/admin“,这是我不想要的东西。但是,如果我从根urls.py文件中删除“url(r'^ 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:  
+0

你为什么不把'url(r'^ admin /',admin.site.urls)'改为'url(r'^ pcari/admin /',admin.site.urls)'? – Lindow

回答

1

在主urls.py

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

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

并从应用网址管理URL

0

但是,如果我去掉” 网址(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), admin命名空间,因为这行注册了在django代码中定义的“admin”命名空间。当你取出,并在那意味着这个程序是注册命名空间“pcari”“pcari”应用程序添加管理站点https://github.com/django/django/blob/master/django/contrib/admin/sites.py#L279

此行显示Django管理会以“admin”的命名空间

注册。但在Django管理模板在模板一样硬编码网址{%URL管理:索引%},让NoReverseMatch异常 https://github.com/django/django/blob/master/django/contrib/admin/templates/admin/base.html#L44存在,导致错误

编辑Django模板硬编码管理命名空间:

你加入in app urls

app_name = 'pcari' 

这就是创造这个Noreverse问题。删除这个应用程序名称行。因为如果添加它,它将用作pacri名称空间。

+0

我明白了,谢谢!这是否意味着我必须拥有管理页面?我有'/ pcari/admin'的管理页面吗? – jmi

+0

检查更新后的答案。从app urls.py中删除创建名称空间的app_name =“pcari” –