में सशर्त क्षेत्र मुझे एक फॉर्म क्लास बनाने की आवश्यकता है जिसमें उपयोगकर्ता लॉग इन हो या नहीं, इस पर निर्भर करता है कि ReCaptcha फ़ील्ड हो या नहीं।फॉर्म
क्योंकि यह एक टिप्पणीफॉर्म है, इसलिए मुझे फॉर्म निर्माण/परिभाषा पर 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
परिभाषा से समकक्ष कोड जोड़ने का कोई तरीका होना चाहिए।
क्या कोई ऐसा करने का एक अच्छा तरीका सोच सकता है?
समस्या यह है कि विजेट अनुरोध के बारे में कुछ भी नहीं जानते हैं, इसलिए लॉग इन उपयोगकर्ता के आधार पर सशर्त रूप से प्रस्तुत करने का कोई तरीका नहीं है। हालांकि, आप django-floppyforms को देखना चाह सकते हैं। चूंकि यह विगेट्स को प्रस्तुत करने के लिए टेम्पलेट का उपयोग करता है, इसलिए यह संभव है कि आप वही कर सकें जो आप चाहते हैं। –
हां, यह मेरा विचार है, एक टेम्पलेट के माध्यम से एक विजेट प्रस्तुत करें। लेकिन मुझे यकीन नहीं है कि मेरे टेम्पलेट वर्र्स में request.user हो सकता है, भले ही मैं ऐसा करता हूं (widget.render जो कुछ भी चाहता है वह कर सकता है, जिसमें टेम्पलेट को प्रस्तुत करना शामिल है, संदर्भ समस्या है)। मैं एक टेम्पलेट प्रस्तुत करना चाहता हूं, जिसे बाद में – Lacrymology
पर पार्स किया जाएगा इसलिए मैंने django-floppyforms का सुझाव दिया। मुझे पूरी तरह से यकीन नहीं है, लेकिन मुझे लगता है कि यह टेम्पलेट का उपयोग करने के बजाय मानक में शामिल है, पैटर्न को शामिल करने के बजाय। किसी भी अन्य टेम्पलेट की तरह टेम्पलेट संदर्भ में 'अनुरोध' तक पहुंच होनी चाहिए।इसे आज़माएं और देखें। –