2012-08-14 73 views
2

我在urls.py以下行:AT /帳號/ TemplateSyntaxError如何定義名稱?

TemplateSyntaxError:

url(r'^changepassword/$', 'django.contrib.auth.views.password_change', 
    {'template_name': 'account/changepass.html', 
    'post_change_redirect' : reverse('settings')}, name='change_password'), 

然而,加載不同的視圖(鏈接到該網址)時,我得到一個TemplateSyntaxError

渲染時捕獲NoReverseMatch:未找到參數'()'和關鍵字參數'{}'的'change_password'反轉。

In template ..../templates/account/settings.html, error at line 7

<p><a href='{% url change_password %}'>Change your password</a>

可能是什麼回事?

回答

1

您不應該在加載url config之前執行的代碼中使用reverse,例如在settings.py中,或者在您的情況下,url config。

從Django 1.4開始,在這些情況下,您可以使用reverse_lazy而不是reverse

+0

我暫時停留在1.3上,但是謝謝你的信息。 – fredley 2012-08-15 11:43:10

-1

嘗試:<a href='{% url "change_password" %}'>(帶引號的名字 - change_password應該是一個字符串,而不是一個模板變量)

+0

-1直到Django 1.5,或除非OP使用'{%load url from future%}' – supervacuo 2012-08-14 17:55:11

+0

@supervacuo:誰說OP *不是使用'{%load url from future%}'?您的評論是有保證的; downvote不是。 – 2012-08-14 18:35:40

+1

如果@Timmy更新答案,我很樂意將-1變成0,甚至+1。在此之前,這是關於'{%url%}'標記的錯誤陳述;一個完美的使用-1 – supervacuo 2012-08-14 19:05:45

-1

您可以使用像這樣:{% url django.contrib.auth.views.password_change %}

+0

嘗試使用reverse_lazy代替反向。 – fabiocerqueira 2012-08-14 17:51:25

+0

這是行不通的 – fredley 2012-08-14 20:17:36

0

卸下reverse呼叫,簡單地改變它/settings/解決這個問題我不知道爲什麼reverse不在這裏工作。