2011-01-22 4 views
3

Я использую django-uni-forms для отображения моих полей с довольно рудиментарным примером прямо из их книги.помощники django-uni-form и теги CSRF над POST

Когда я обрабатываю поля формы с помощью <form>{%csrf_tag%} {%form|as_uni_form%}</form>, все работает так, как ожидалось.

Однако Джанго-уни-формы Помощники позволяют генерировать тэг формы (и другие вспомогательные контент, связанный с), используя следующий синтаксис - {% with form.helper as helper %}{% uni_form form helper%}{%endwith%} - Это создает <form> тег для меня, так что некуда встраивать мой собственный CSRF_token. Когда я пытаюсь использовать этот синтаксис, форма отображается отлично, но без токена CSRF, и поэтому подача формы терпит неудачу каждый раз.

У кого-нибудь есть опыт? Есть ли установленный способ добавить токен? Я предпочитаю второй синтаксис для повторного использования. Спасибо!

+0

В соответствии с этим шаблоном должен присутствовать тег csrf https://github.com/pydanny/django-uni-form/blob/master/uni_form/templates/uni_form/whole_uni_form.html –

ответ

3

Вы проверили источник? Он уже должен быть там. Шаблон тега uni_form должен включать его автоматически.

+0

Оказывается, мои требования.txt (пик манифест) имел 0,7,0 жестко закодированных, и я не заметил (Pinax определил это для меня). Обновление, исправленное для меня. – linked

2

У меня такая же проблема с django-uni-form. Маркер CSRF не отображается после <form> тега, если я использую:

{% load uni_form_tags %} 
{% uni_form form helper %} 

или:

{% load uni_form_tags %} 
{% with form.helper as helper %} 
    {% uni_form form helper%} 
{%endwith%} 

Если я включить его вручную он работает:

<form action='{{ request.path }}' method='POST' class="uniForm">{% csrf_token %} 
{{ form|safe }} 
</form> 

Я нашел blog post который описывает, как включить токен csrf вручную:

helper = FormHelper() 

csrf_token = Hidden(
       name = 'csrfmiddlewaretoken', 
       value = request.META['CSRF_COOKIE']) 
helper.add_input(csrf_token) 

Совсем не очень, но, по крайней мере, он получает унификацию.

+0

Ознакомьтесь с моим комментарием к вышеуказанному ответу; Я отметил его как правильно, потому что, ну, технически он был :) – linked

1

Простейшим решением является установка django-uni-form из GitHub до тех пор, пока версия PyPi не будет обновлена ​​до 0,8.

pip install https://github.com/pydanny/django-uni-form/tarball/master 
1

Использовать самую последнюю версию django-uni-form. Он исправляет это и многое другое.

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