我希望能够在自定义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 :(得分:3)
我遇到了类似的问题。
handler404
应该在urls.py
文件中设置,但您还必须导入它,而且不在文档中。
将handler404
添加到您的导入
from django.conf.urls.defaults import patterns, include, url, handler404
设置handler404="string.of.the.view.to.load"
handler404="myApp.views.pagenotfound"
在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'