Дополнительные переменные в пользовательском шаблоне 404 - PullRequest
2 голосов
/ 18 января 2010

Я хочу использовать дополнительные переменные в настраиваемом шаблоне 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 ]

3 голосов
/ 22 сентября 2011

У меня была похожая проблема.

handler404 должно быть установлено в файле urls.py, но вы также должны импортировать его, чего нет в документации.

  1. добавьте handler404 к вашему импорту

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

    handler404="myApp.views.pagenotfound"
    
  3. определите свой вид 404в view.py как обычно.

2 голосов
/ 18 января 2010

Тот факт, что вы можете получить доступ к request_path, но не к extra_var, подсказывает мне, что ваше представление вызывается неправильно, поскольку request_path автоматически передается в шаблон 404.html согласно документации * 1006. *:

Если вы не определите свой собственный вид 404 - и просто используйте значение по умолчанию, которое рекомендуется - у вас еще есть один обязательство: вы должны создать 404.html шаблон в корне вашего шаблона каталог. Представление 404 по умолчанию будет используйте этот шаблон для всех 404 ошибок. Представление 404 по умолчанию пройдет один переменная к шаблону: request_path, который является URL, который привело к 404.

Я думаю, вам нужно дать handler404 строку, а не модуль, например:

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