Bedingtes Feld im Formular

Ich muss eine Form-Klasse erstellen, die möglicherweise ein ReCaptcha-Feld enthält, je nachdem, ob der Benutzer angemeldet ist oder nicht.

Da dies ein CommentForm ist, habe ich keinen Zugriff auf dierequest Objekt auf Formularerstellung / -definition, daher kann ich mich nicht darauf verlassen.

Für diePOST Die Lösung anzufordern ist einfach: Ich habe folgendes:

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()

Danach sollte die Formularvalidierung wie vorgesehen funktionieren. Das Problem liegt nun auf der Vorlagenseite. Ich brauche die Vorlage so:

<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>

Aber ich möchte diesen Code nicht bei jedem wiederholen müssencomments/*/form.html Vorlage. Ich denke, es sollte eine Möglichkeit geben, äquivalenten Code aus einem Widget hinzuzufügenrender Methode undMedia Definition.

Kann sich jemand einen schönen Weg vorstellen, dies zu tun?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage