自定义404模板上的额外变量

时间:2010-01-18 14:41:12

标签: python django django-templates

我希望能够在自定义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.

2 个答案:

答案 0 :(得分: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视图作为常规视图。

答案 1 :(得分:2)

您可以访问request_path而非extra_var这一事实告诉我您的视图未被正确调用,因为request_path会自动传递到404.html模板,根据{{​​3}}:

  

如果您没有定义自己的404视图    - 并且只使用默认值,建议使用 - 您仍然有一个   义务:您必须创建404.html   模板根目录中的模板   目录。默认的404视图将   将该模板用于所有404错误。   默认的404视图将通过一个   变量到模板:   request_path,即URL   结果是404。

我认为你需要给handler404一个字符串,而不是一个模块,如下所示:

handler404 = 'myproject.myapp.views.handler404'