Условное поле в форме

Мне нужно создать класс формы, который может иметь или не иметь поле ReCaptcha в зависимости от того, вошел ли пользователь в систему или нет.

Поскольку это форма CommentForm, у меня нет доступа к объекту requestпри создании/определении формы, поэтому я не могу на это полагаться.

Для запроса POSTрешение простое: у меня есть следующее:

class ReCaptchaCommentForm(CommentForm):
    def __init__(self, data=None, *args, **kwargs):
        super(ReCaptchaCommentForm, self).__init__(data, *args, **kwargs)
        if data and 'recaptcha_challenge_field' in data:
            self.fields['captcha'] = ReCaptchaField()

После этого проверка формы должна работать как задумано. Теперь проблема на стороне шаблона. Мне нужно, чтобы шаблон был таким:

<form action={% comment_form_target %} method="post">
{# usual form stuff #}
{% if not user.is_authenticated %}
<script  type="text/javascript"
         src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script>
<div id="recaptcha-div"></div>
<script type="text/javascript">
  Recaptcha.create({{ public_key }}, "recaptcha-div",
                   { theme: 'white',
                     callback: Recaptcha.focus_response_field });
</script>
{% endif %}
</form>

Но я бы не хотел повторять этот код в каждом шаблоне comments/*/form.html. Я полагаю, что должен быть какой-то способ добавить эквивалентный код из метода renderвиджета и определения Media.

Кто-нибудь может придумать хороший способ сделать это?

5
задан Lacrymology 6 June 2012 в 20:15
поделиться