Промежуточное программное обеспечение CSRF - изменить вывод csrf_token (с xHTML на HTML) - PullRequest
3 голосов
/ 31 января 2010

У меня проблема с промежуточным программным обеспечением django csrf ... когда я использую тег шаблона csrf_token, я получаю такой вывод:

<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='6bda3605af31dd8595d2a67d0dda827b' /></div>

но я хочу этот вывод (HTML не xHTML:

<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='6bda3605af31dd8595d2a67d0dda827b'></div>

Я пытался увидеть код в django.middleware.csrf.CsrfViewMiddleware, но безуспешно: (

Итак, как мне изменить вывод тега csrf_token?

1011 * Танки *

Ответы [ 3 ]

3 голосов
/ 31 июля 2010

Вот мое решение проблемы.

{% with csrf_token as csrf_token_clean %}{{ csrf_token_clean }}{% endwith %}

В вашем шаблоне будет возвращен только ключ токена, поэтому вы можете написать свой собственный действительный HTML-тег ввода, например так.

<input type="hidden" name="csrfmiddlewaretoken" value="{% with csrf_token as csrf_token_clean %}{{ csrf_token_clean }}{% endwith %}" >

Источник: http://www.phptodjango.com/2010/07/django-csrftoken-template-tag-fix.html

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

Решение на самом деле очень простое:

<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">

Нет смысла в {% with %} конструкции.

1 голос
/ 31 января 2010

Вам нужно перейти и отредактировать django.template.defaulttags.py: в строке 48 выводится тег, и вы можете изменить его по своему усмотрению.

Обратите внимание, что это функция разработки, и поэтому она может быть изменена - обновление Django, вероятно, удалит ваше изменение! *
Кроме того, потратьте время на то, чтобы найти билет на эту конкретную проблему: предложенное мной решение, скорее всего, решит вашу проблему, но я думаю, что «официальное» исправление будет намного приятнее.

...