2017-06-12 95 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」 –