2012-03-13 9 views
1

Я пытался создать форму в своем собственном теге шаблона, а затем попытаюсь создать там HTML-форму, а затем просто использовать ее внутри своих шаблонов, но я получаю CSRF Verification Failed ошибка, когда пользователь отправляет форму (и это естественно, потому что я не предоставил форму внутри шаблона тега с csrf_token), я STH нравится:Проверка CSRF, В шаблонах django

@register.simple_tag(takes_context=True) 
def change_password_(context): 
    csrf = context.get('csrf_token', '') 
    html = "<form action='{% url change_password %}' method='post' id='renew_password' >" 
    csrf_string = str(csrf) 
    html += "<input type='hidden' value='%' />" %csrf_string 
.... 

, но до сих пор я получаю CSRF Ошибка проверки ошибки :(любая идея, как заставить ее работать?
Спасибо

ответ

2

Во-первых, попробуйте напечатать csrf в тег шаблона или проверить отображаемый html, чтобы убедиться, что тег шаблона успешно получает csrf_token из контекста шаблона.

Во-вторых, ваш тег csrf не имеет атрибута имени. Попробуйте следующее:

html += "<input type='hidden' name='csrfmiddlewaretoken' value='%' />" %csrf_string 

Наконец, я хотел бы рассмотреть написание тег шаблона в качестве inclusion tag. Это переместит html в отдельный шаблон, который будет выглядеть более аккуратным. Затем вы можете использовать {% csrf_token %} в файле шаблона тега.

+0

Кажется, проблема заключалась в том, что атрибут «name», он работал, когда я добавил, что :) Спасибо –

-2

Вам нужен {% csrf_token %} после тега формы, вместо скрытого ввода.

Прочтите this article для получения дополнительной информации.

+0

Я делаю это из TemplateTag, это не шаблон (это код на Python) –

0

Глядя на форму, которую я сделал с помощью tempates У меня есть этот фрагмент кода:

<form action="" method="post"> 
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' 
value='e987effa0c6ee111225a3c0edc927b06' /></div><table> 

Может быть, это даст вам представление, как поместить его непосредственно в разметке

+0

hmm, как это может быть полезно, если у вас есть статическое значение для токена? – Jingo

+0

Конечно, мой токен бесполезен для OP. Я просто использовал свой фрагмент в качестве примера, поскольку OP, казалось, знал, как получить свой собственный токен. –

+0

Хорошо, неважно, похоже, я понял это неправильно. – Jingo

Смежные вопросы