2010-01-18 38 views
2

我希望能夠在自定義404模板上使用額外變量自定義404模板上的額外變量

#404.html 
{{ extra_var }} 

我已經嘗試:

#urls.py 
from myproject.myapp import views 
handler404 = views.handler404 

#views.py 
from django.template import RequestContext, loader 
from django import http 
def handler404(request): 
    extra_var = 'my_extra_var' 
    t = loader.get_template('404.html') 
    return http.HttpResponseNotFound(t.render(RequestContext(request, 
     {'request_path': request.path, 'extra_var': extra_var, }))) 

但是,它似乎不工作:我只能訪問request_path.

+0

「它似乎沒有工作」是可怕的模糊。怎麼了?你確定你的'handler404'正在被調用嗎?你可以在模板中訪問'request_path'嗎? – 2010-01-18 14:56:10

+0

我只能訪問'request_path'。 – 2010-01-18 15:21:08

+0

你的設置中是否有'DEBUG = True'? – 2010-01-18 15:27:52

回答

2

,您可以訪問request_path但不extra_var暗示的事實對我來說你的看法沒有被正確調用,因爲request_path自動傳遞到404.html模板,根據documentation

如果你沒有定義自己的404視圖 - 並且只使用默認,這是推薦 - 你仍然有一個 義務:必須在模板 的根目錄創建一個404.html 模板目錄。默認的404視圖將 對所有404錯誤使用該模板。 默認的404視圖將一個 變量傳遞到模板: request_path,這是網址 導致404

我認爲你需要給handler404一個字符串,而不是一個模塊,如這個:

handler404 = 'myproject.myapp.views.handler404' 
3

我有一個類似的問題。

handler404應該在urls.py文件中設置,但您也必須導入它,而這不在文檔中。

  1. 添加handler404到您的進口

    from django.conf.urls.defaults import patterns, include, url, handler404 
    
  2. 設置handler404="string.of.the.view.to.load"

    handler404="myApp.views.pagenotfound" 
    
  3. view.py定義你的404視圖作爲通常的看法。

+0

這將是很好的在文檔中,有助於新手其他很多時間浪費 – 2014-07-03 06:48:19