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?