2014-08-28 30 views
1

我要退房首次Django的教程https://docs.djangoproject.com/en/1.6/intro/tutorial03/Django的“删除模板硬编码的URL”不工作

到目前为止,它一直一帆风顺以下。我在“删除硬编码的网址”部分遇到了一些问题。我正在使用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,现在也工作了。我在每次检查之前重新启动服务器。我很烦。但至少它工作。

+0

看起来这是不是在你的模板确切的代码。你可以复制粘贴确切的代码? – karthikr 2014-08-28 18:17:10

+0

您的模板的其余部分是否真的有效?它似乎并没有真正被解析,所以你在链接中获得了原始模板标签。 – 2014-08-28 19:15:19

+0

是的,这也是我的想法,但它工作正常,直到我切换链接到{%url%}标记。我是否缺少导入或其他内容? – 2014-08-28 21:49:31

回答

3

回溯中的这条线表明您在结束大括号之前遗漏了%

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

是的,这是建议。麻烦是,我没有! :)我也尝试删除该文件并重新制作,以查看是否有些奇怪的事情发生。重命名它并将我的polls.urls从索引更改为index1。仍然得到相同的错误和缺少的% – 2014-08-29 07:55:37

+0

我认为它更有可能是poll.id被设置为'''{%url'detail'poll.id}“'''因为它识别了url模板标签作为有效。由于这是一个字符串,并且poll_id需要是一个数字,所以它失败了。如果这是因为你错过了大括号之前的%,那么它会在模板中产生语法错误。 – schillingt 2015-08-08 14:41:40

+1

@schillingt如果'poll.id'不是一个数字,那么我认为你会得到'NoReverseMatch'。无论如何,这并不重要,问题已经一年了,所以OP希望已经解决了他们的问题。 – Alasdair 2015-08-08 19:32:05

0

甚至,我面临这个问题,对我的原因是我{ %% },那里的正确的语法是{%%}之间给了空间。对于完整性我已经给下面的正确和不正确的语法 -

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

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