我需要根据用户是否登录来创建一个可能有或没有 ReCaptcha 字段的 Form 类。
因为这是一个 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
定义中添加等效代码。
谁能想到一个很好的方法来做到这一点?