我决定拥有主要目标网页和关于我的主页。页面等在我的项目的根目录而不是作为一个不同的应用程序。这意味着该项目如下所示:
/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),
问题是,当我尝试在我的模板中指向一个网址时,它的工作原理是:
<a href="{% url 'index' %}">Home</a>
但是,如果我尝试引用命名空间,那么:
<a href="{% url 'Hello_World:index' %}">Home</a>
我收到此错误:
NoReverseMatch at /
'Hello_World' is not a registered namespace
我做错了什么?提前谢谢。
答案 0 :(得分:1)
urls.py在settings.py中设置为root url 它可能看起来像这样
ROOT_URLCONF = 'Hello_World.urls'.
您无法命名您的根网址,因为只有一个根网址。仅在存在多个应用时才会进行操作。
相反,您可以提及网址的名称并使用它。
Ex: <a href="{% url 'index' %}">Home</a>
以上内容适用于所有模板以及所有没有命名空间的应用程序,因为href将首先尝试项目的urls.py文件,它将与名称索引匹配
url(r'^$', views.IndexView.as_view(), name='index'),.
django的django错误说明命名空间不匹配beacuse它搜索其他应用程序urls.py文件的命名空间,因为它不匹配app_name ='Hello_World'否则显示错误。