2011-06-07 147 views
1

我是Django的新手,已經開始研究成熟的Django項目。Django NoReverseMatch錯誤

我想爲用戶帳戶屏幕添加一個新頁面,並鏈接到它。但是我得到一個NoReverseMatch錯誤。

要/users/urls.py我說:

url(r'^panel/history$', 
    'theproject.users.views.history', 
    name='account_history' 
), 

...這是與它上面的線是一致的:

url(r'^panel$', 
    'theproject.users.views.control_panel', 
    name='account_panel' 
), 

要/users/views.py我說:

@login_required 
def history(request): 
    return render_to_response('users/ourbrand_history.html', {}, 
    context_instance=RequestContext(request)) 

...這是與它上面的線是一致的:

@login_required 
def control_panel(request): 
    return render_to_response('users/ourbrand_panel.html', {}, 
    context_instance=RequestContext(request)) 

要/templates/users/ourbrand_panel.html我加入:

<a href="{% url account_history %}">History</a> 

...這與它上面的線是一致的:

<a href="{% url account_panel %}">Home</a> 

現在,當我加載/面板I得到一個TemplateSyntaxError:NoReverseMatch。

Reverse for 'account_history' with arguments '()' and keyword arguments '{}' not found. 

更新:作爲一個測試,我刪除了我的鏈接在模板 - 和/面板加載罰款。如果我然後刪除/users/urls.py和/users/views.py /面板仍然加載。我刪除了所有的cookies,歷史記錄等。我是否需要在終端上運行一個命令(比如ruby中的rake)來提交對urls.py的更改?或者應該改變'正常工作'?

+0

據我所知,一切都看起來是正確的(儘管後面的斜槓是一個好主意,正如@pastylegs所說)。有沒有可能是你沒有剪切/粘貼,在另一行中可能會影響它的一些小的語法錯誤?也許是一個額外的引用「或改變模板讀取方式的東西? – 2011-06-07 19:03:19

+0

(儘管我認爲你剪切/粘貼代碼,顯示的內容是正確的) - 你可以仔細檢查你是否在所有地方一直使用下劃線'_',沒有意外地使用連字符'-' :)我只是測試我的命名的URL,切換我用於下劃線(工作)的連字符,但是當我混合它們時,它會產生相同的錯誤 – 2011-06-07 19:12:17

+0

如果您正在運行Django開發服務器的所有文件更改都會導致服務器重新加載文件,因此您不必提交任何內容。但是,在模板中 - 如果變量不存在,它只是計算爲空字符串,它不會't給你任何錯誤,所以頁面將加載正常 – 2011-06-07 19:16:00

回答

1

回答我的問題的視圖鏈接(基於幫助提供here)...

由於服務器是生產,在服務器重新啓動之前,對urls.py的更改不起任何作用。目前我沒有su訪問權限,所以不能apachectl restart,但看來這將解決問題。

+0

它確實解決了這個問題:'apache2ctl restart' – ram1 2011-06-21 17:16:10

2

嘗試:

{% url users.views.control_panel %} 
{% url users.views.history %} 
模板和變化

url(r'^panel/history/$','theproject.users.views.history',name='account_history'), 
url(r'^panel/$','theproject.users.views.control_panel',name='account_panel'), 

     ^
在網址

。 (請注意在第一個參數後斜線。)

1

移動這樣的:

url(r'^panel/history/$', 
    'theproject.users.views.history', 
    name='account_history' 
), 

users/urls.py到項目層面urls.py

這可能是因爲users/urls.py不會從主urls.py也定義了/panel/

+0

如果是這樣,那麼他最好在主'urls.py'中做一個'include('users.urls')',並將URL保存在'users/urls.py'中,而不是移動URL 。 – 2011-06-07 19:19:59

+0

我試過了,但仍然出現'NoReverseMatch'錯誤。至於'/ users/urls.py'是否從主'urls.py'被調用,我相信它是:'urlpatterns = patterns('',(r'^ accounts /',include('theproject.users .urls')))' – ram1 2011-06-07 19:23:28

2

如果您使用mod_wsgi的,然後進行簡單:

$ touch /path/to/your/wsgi_file.wsgi 

應該做的伎倆(無需重新啓動服務器)。