2016-10-08 35 views
1

我決定在我的項目的根目錄下有主頁面和'關於我'頁面等頭版,而不是其他應用。這意味着該項目是這樣的:Django根項目url命名空間不起作用

/django-helloworld 

    /Hello_World 
    __init__.py 
    url.py 
    views.py 
    wsgi.py 

    /static 
    style.css 

    /templates 
    index.html 

我的urls.py看起來是這樣的:

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

from . import views 

app_name = 'Hello_World' 
urlpatterns = [ 
    url(r'^$', views.IndexView.as_view(), name='index'), 
    url(r'^admin/', admin.site.urls), 

的問題是,當我嘗試指向我的模板的URL,它的工作原理是這樣做:

<a href="{% url 'index' %}">Home</a> 

但如果我嘗試引用的命名空間,如下所示:

<a href="{% url 'Hello_World:index' %}">Home</a> 

我得到這個錯誤:

NoReverseMatch at/
'Hello_World' is not a registered namespace 

我在做什麼錯?提前致謝。

+0

是你的'ROOT_URLCONF'嗎? – knbk

+0

@knbk你到底在說什麼?在settings.py我有'ROOT_URLCONF ='Hello_World.urls'' –

回答

1

urls.py你指的是在您的settings.py設置爲根URL 它可能看起來像這樣

ROOT_URLCONF = 'Hello_World.urls'. 

你不能命名空間的根URL,因爲只能有一個根url.Namesapcing僅在多個應用程序存在時才能完成。

相反,您可以提及url的名稱並使用它。

Ex: <a href="{% url 'index' %}">Home</a> 

以上將在所有的模板,並在所有的應用程序工作,沒有命名空間,因爲在href將首先嚐試爲您的項目的urls.py文件,其中將匹配名字指數

url(r'^$', views.IndexView.as_view(), name='index'),. 

django錯誤導致命名空間不匹配的原因django會搜索其他應用程序urls.py文件的命名空間,因爲它不匹配app_name ='Hello_World',否則顯示錯誤。