2014-08-28 34 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>