我是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'),
]
答案 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')),
]