2012-04-27 25 views
8

我不知道這個SO question是否與我即將描述的問題相同,但它的確有共同的症狀。不幸的是,我寫作時仍然沒有解決。{%url%}給了我NoReverseMatch錯誤,而reverse()返回了這個url就好了。爲什麼?

所以這是我的問題。我正在嘗試將James Bennett的django-registration app添加到我的django項目中。我幾乎完成了配置,以滿足我的需求 - 自定義模板和網址。就在我認爲一切都很好的時候。我在使用{% url 'testing' item_id=123 %}(我也嘗試使用視圖名稱,myapp.views.test,而不是運氣)嘗試django-registration所需的一個自定義模板時出現了NoReverseMatch錯誤。有趣的是,我在shell中嘗試了reverse('testing', kwargs={'item_id':123}),並且返回的網頁很好。我認爲{% url %}在後端使用reverse(),但爲什麼我得到不同的結果?

urls.py:(我的網站的URL配置)

urlpatterns = patterns('myapp.views', 
    url(r'^test/(?P<item_id>\d+)/$', 'test', name='testing'), 
) 

activation_email.txt:(上述模板注意這是故意在.TXT擴展所要求的Django的登記這應該不是問題的原因。)

{% comment %}Used to generate the body of the activation email.{% endcomment %} 
Welcome to {{ site }}! Please activate your account by clicking on the following link: 

{% url 'testing' item_id=123 %} 

Note the activation link/code will be expired in {{ expiration_days }} days. 

我不知道它是否重要,但只是想我應該提到activation_email.txt存儲在模板目錄中myapp儘管它被django-registration使用。

此外,我使用Django 1.4

我有一種感覺,這個問題有事情做與URL命名空間,我從來沒有了解的話題,但它只是一個天真的猜測。 (國際海事組織,Django文檔很好地解釋了關於Django的一切,除了涉及到url命名空間時)

回答

12

我不是這裏的專家,但是在我正在使用的Django項目中,我使用名稱的網址沒有引號。我只是在我的一個模板中的類似行中添加了引號,並且它與您的錯誤產生了相同的錯誤。

嘗試:

{% url testing item_id=123 %} 
+1

有趣〜的作品!非常感謝。但是這背後的理由是什麼?我的意思是django文檔中所有'{%url%}'的例子都使用了引號。 – tamakisquare 2012-04-27 23:41:47

+0

檢查文檔中指定的url部分:https://docs.djangoproject.com/en/dev/topics/http/urls/#naming-url-patterns據我所知,如果您使用url標記一個到視圖的實際路徑,那麼你需要引號。如果使用名字,你不會。 – John 2012-04-27 23:46:32

+2

感謝您的參考。在模板標籤文檔中,有一個示例'{%url'myapp:view-name'%}',所以我認爲qoutes是使用視圖名稱所必需的。我想這隻適用於當我使用視圖名稱和名稱空間一起時,這有點令人困惑。 – tamakisquare 2012-04-27 23:51:03

相關問題