2014-11-14 2 views
6

Если проверка csrf не удалась, Django отображает страницу с ошибкой 403.Django: как переопределить CSRF_FAILURE_TEMPLATE

Error page displayed on csrf error

Мне кажется, что эта ошибка может возникнуть в регулярном использовании, например, когда пользователь отключить использование куков в его настройках браузера.

К сожалению, это сообщение об ошибке не очень полезно для конечного пользователя и имеет макет «django-error» (это проблема, потому что, например, навигация по сайту отсутствует).

Django имеет отличный механизм для переопределения шаблонов, но кажется, что этот шаблон жестко закодирован в коде. https://github.com/django/django/blob/1.6.8/django/views/csrf.py

Есть ли способ отменить этот шаблон, чтобы обеспечить более дружеское сообщение пользователям?

ответ

11

Обратитесь к Django document, вы можете установить CSRF_FAILURE_VIEW в вашем settings.py, такие как:

CSRF_FAILURE_VIEW = 'your_app_name.views.csrf_failure' 

Кроме того, вам нужно определить csrf_failure функцию на ваш взгляд (нужно иметь эту подпись: def csrf_failure(request, reason="") основе на документе), который похож на:

def csrf_failure(request, reason=""): 
    ctx = {'message': 'some custom messages'} 
    return render_to_response(your_custom_template, ctx) 

И вы можете написать свой собственный шаблон, как:

<!DOCTYPE html> 
<html> 
    <head lang="en"> 
     <meta charset="UTF-8"> 
     <title></title> 
    </head> 
    <body> 
     {{ message }} 
    </body> 
</html> 
+0

Спасибо. Это именно то, что мне нужно. Просто обратите внимание, что «причина» является сообщением разработчика и не должна отображаться конечному пользователю. Так что, в моем случае, я не буду отображать его в моем шаблоне. – luc

+0

@luc, отметил и отредактировал мой ответ, спасибо! – dazedconfused

+0

Как бы вы это протестировали? – guival