Django"删除模板中的硬编码网址"不工作

时间:2014-08-28 18:11:29

标签: python django django-templates django-urls

我正在按照教程https://docs.djangoproject.com/en/1.6/intro/tutorial03/

首次查看django 到目前为止,它一帆风顺。我在删除硬编码网址部分遇到了麻烦。我正在使用Django 1.6.6。

当我从以下位置更改硬编码的网址时

<li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>

为:

<li><a href="{% url 'detail' poll.id %}">{{ poll.question }}</a></li>

我收到404错误如下:

Page not found (404)
Request Method:     GET
Request URL:    http://localhost:8000/polls/%7B%%20url%20'detail'%20poll.id%20%7D

Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:

^polls/ ^$ [name='index']
^polls/ ^(?P<poll_id>\d+)/$ [name='detail']
^polls/ ^(?P<poll_id>\d+)/results/$ [name='results']
^polls/ ^(?P<poll_id>\d+)/vote/$ [name='vote']
^admin/

The current URL, polls/{% url 'detail' poll.id }, didn't match any of these.

You're seeing this error because you have DEBUG = True in your Django settings file.  Change that to False, and Django will display a standard 404 page.

地址栏中显示的网址是

mylocalenv/polls/%7B%%20url%20%27detail%27%20poll.id%20%7D

我已经尝试从'详细'中删除引号,但鉴于我在django 1.6.6上,我不应该这样做。它也没用。我也尝试过向前跳过一点,并在urls.py中包含/ polls / namespace,但是再一次,没有快乐。

我的urls.py文件如下所示:

from django.conf.urls import patterns, url

from polls import views

urlpatterns = patterns('',
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'), 

)

我的index.html模板中的确切代码是:

{% if latest_poll_list %}
    <ul>
    {% for poll in latest_poll_list %}
        <li><a href="{% url 'detail' poll.id %}">{{ poll.question }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

明白了

但令人沮丧的是,我不知道为什么。出于对我的index.html的绝望,我开始在这一行上使用index.html文件:

<li><a href="{% url 'detail' poll.id %}">{{ poll.question }}</a></li>

由于没有逻辑原因,我将poll.id更改为poll_id。正如我所料,重新加载打破了index.html。当我把它改回poll.id一切正常。这毫无意义。我甚至ctrl ^ z回到以前不能正常工作的index.html,现在它也在工作。我在每次检查前都重新启动了服务器。我很烦。但至少它正在发挥作用。

3 个答案:

答案 0 :(得分:3)

回溯中的这一行表明你在结束大括号之前错过了%

The current URL, polls/{% url 'detail' poll.id }, didn't match any of these.

答案 1 :(得分:0)

即便如此,我遇到了这个问题,对我而言,原因是我在{ %% }之间留出了空格,因为正确的语法是{%%} 。为了完整起见,我在下面给出了正确和错误的语法 -

正确的语法 - <li><a href="{% url 'detail' poll.id %}">{{ poll.question }}</a></li>

语法错误 - <li><a href="{ % url 'detail' poll.id % }">{{ poll.question }}</a></li>

答案 2 :(得分:0)

检查您的 polls/urls.py 文件,确保您的 urlpatterns 是 [],而不是 {}

float: left