2013-01-13 45 views
0

我試圖通過爲什麼我的網址模板標記錯誤?

{% url 'session_views.login_user' %} 

我urls.py來檢索模板的視圖的URL看起來像

從django.conf.urls.defaults導入*

urlpatterns = patterns('myappname', 

    # Greets user on the home page. 
    (r'^$', 'session_views.index'), 

    # Session 
    (r'^login/?$', 'session_views.login_user'), 
) 

但是,我收到以下錯誤。

TemplateSyntaxError at/
Caught NoReverseMatch while rendering: 
Reverse for ''session_views.login_user'' with arguments '()' 
and keyword arguments '{}' not found. 

爲什麼我犯錯?我在session_views.py中明確定義了一個名爲login_user的視圖。

回答

2

看看錯誤Reverse for ''session_views.login_user'',它有兩組單引號。不要使用模板中的引號 - 它應該閱讀:

{% url session_views.login_user %}

或者你能說出你的意見 - 之後,你就可以通過名字來稱呼他們,那就需要加引號:

urls.py:

URL模式=模式( 'myappname',

#映入眼簾的是主頁上的用戶(R '^ $', 'session_views.index',名字=」 index_view「),

#會議(R '^登錄/ $?', 'session_views.login_user',名字= 「login_user」),)

模板網址相反:

{% url "login_user" %}

編輯:

看到Tomita's答案後,我可能誤解了這個問題。我以爲你試圖檢索URL,因此你可能試圖將URL作爲一個變量來檢索。我的回答適用於跟隨網址,如<a href="{% url session_views.login_user %}"....。以防萬一,我會離開它。

+1

+1,沒有你的回答是正確的。我正在用另一種選擇來補充你的答案。他可以通過<1.5語法修復它,或者通過加載1.5語法來修復它。 –

2

您可能正在查看更改URL標記功能的開發分支文檔。

對於django < 1.5,您應該遵循相應的文檔,或者通過加載未來的url標籤來驗證您的代碼。

{% load url from future %} 

在Django的1.5,網址模板標籤的行爲會發生變化, 第一個參數被拍成上下文變量,而不是 是一個特殊的情況下不帶引號的常量。這將允許url標記 使用上下文變量作爲要顛倒的URL名稱的值。

爲了提供前向兼容性路徑,Django 1.3提供了一個未來兼容性庫 - 將來 - 實現新的 行爲的 。要使用此庫,請使用url標記在任何 模板的頂部添加一個加載調用,然後用引號將第一個參數包裝爲url標記 。例如:

{%load url from future%} {%url'myapp:view-name'%}新庫 也放棄了對用於將參數分隔到 URL模板標記的逗號語法的支持。

在Django 1.5中,舊行爲將被替換爲未來標記庫提供的行爲 。使用新的語法將現有模板遷移到 。

相關問題