Django:“ weblearn”不是注册的名称空间

时间:2019-09-18 18:23:48

标签: django

我是Django的初学者,到目前为止,我一直在关注this教程-除了将应用程序命名为weblearn而不是本教程中的polls以外,还有一点例外。到目前为止,一切正常,一切正常。

我大约在第四页的一半处,刚刚创建了文件weblearn/templates/weblearn/results.html,并且再次检查了名称polls是否在任何代码/ html中均未使用。

但是,当我按照建议导航到页面http://127.0.0.1:8000/weblearn/1/时,仍然出现错误

In template /Users/alex/Coding/Django/learnit/weblearn/templates/weblearn/detail.html, error at line 5
'weblearn' is not a registered namespace

我该怎么做才能调试此错误?我丝毫不知道错误可能意味着什么...

detail.html

<h1>{{ question.question_text }}</h1>

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<form action="{% url 'weblearn:vote' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}">
    <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br>
{% endfor %}
<input type="submit" value="Vote">
</form>

urls.py

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),
    path('<int:question_id>/results/', views.results, name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

2 个答案:

答案 0 :(得分:1)

向您urls.py添加app_name

from django.urls import path
from . import views

app_name = 'weblearn'

# your urlpatterns

这样{% url 'weblearn:vote' question.id %}就会知道必须调查weblearn/urls.py

答案 1 :(得分:0)

好像您正在使用名称空间生成操作URL,{% url 'weblearn:vote' question.id %}weblearn是名称空间,vote是URL名称。要使其正常工作,您应该在ROOT_URLCONF中(在settings.py中)定义名称空间,如下所示:

project / settings.py(ROOT_URLCONF)

from django.urls import include

app_name = 'weblearn'
urlpatterns = [
    path('weblearn/', include('weblearn.urls', namespace='weblearn')),
]