2012-03-19 3 views
6

चलिए बस कहें कि मुझे एक पृष्ठ में एक निश्चित मात्रा में एचटीएमएल प्रस्तुत करना होगा, उदाहरण के लिए, उपयोगकर्ता की प्रोफाइल जानकारी के लिए। जिनजा के मैक्रोज़ ऐसा लगता है कि वे इस तरह के उपयोग के लिए बिल्कुल उपयुक्त हैं। हालांकि, Django में मैक्रोज़ नहीं है।Django के templating प्रणाली में Jinja के मैक्रोज़ के उपयुक्त समकक्ष क्या होगा?

अभी, मैं एक ही उद्देश्य के लिए एक कस्टम फ़िल्टर का उपयोग कर रहा हूं - क्या यह इसके बारे में जाने का सबसे अच्छा तरीका है, या क्या मुझे कुछ याद आ रहा है?

धन्यवाद।


ps। मैं एक ऐप माइग्रेट कर रहा हूं जो GAA पर वेबएप 2 & जिंज से Django के साथ चला गया।

+0

जिंज डीजेंगो टेम्पलेटिंग सिस्टम की कुछ सीमाओं को प्राप्त करने के लिए डीजेंगो टेम्पलेट्स को विस्तारित करता है। मैक्रो का ब्लॉक टैग कुछ ऐसा है जो जिन्जा विशिष्ट है। इसका अनुकरण करने का एकमात्र तरीका है (जैसे आपने कहा) कस्टम टैग और फ़िल्टर, और कभी-कभी ये बल्कि भारी हो सकते हैं। –

उत्तर

7

दस्तावेज़ीकरण के साथ कुछ और मकबरे के बाद, मुझे अंततः "correct" way to do this: custom inclusion tags मिला, जो आपको टेम्पलेट से टैग बनाने देता है।

+2

यदि आप चाहें तो इसके बजाय आप जिन्जा का उपयोग कर सकते हैं। – Marcin

+2

यह लिंक मर चुका है। यहां एक नया है: https://docs.djangoproject.com/en/1.10/howto/custom-template-tags/#inclusion-tags – fluffels

2

दो अन्य दृष्टिकोण हैं जो आप ले सकते हैं: blocks और includes। ब्लॉक के साथ आपको विरासत के माध्यम से इसे सभी तरह से शामिल करना होगा। इसके साथ ही, आप केवल आवश्यकतानुसार लोड करते हैं लेकिन आपको यह सुनिश्चित करना होगा कि आप अपने दृश्य से उपयुक्त संदर्भ चर पारित कर रहे हैं। हालांकि, आपका वर्तमान दृष्टिकोण शायद DRY के संदर्भ में सबसे उपयोगी है।

+0

धन्यवाद; मैं बस पुष्टि करना चाहता था। क्या कोई विशेष कारण है कि Django ने Jinja से मैक्रोज़ क्यों नहीं उठाया है? – aviraldg

+0

@aviraldg Django का टेम्प्लेट सिस्टम डिज़ाइन द्वारा शक्तिशाली नहीं है। – Marcin

1

Django में मैक्रोज़ नहीं हैं, इसलिए यह या तो कस्टम फ़िल्टर है, या अपने दोहराने वाले कोड को अपने टेम्पलेट में अलग कर रहा है, और इसे "साथ" के माध्यम से पारित विभिन्न तर्कों के साथ और अधिक समेत, जो शायद मैक्रोज़ की तुलना में धीमे काम करेगा। लेकिन आप वास्तव में django पूरी तरह से ठीक के साथ jinja2 templating प्रणाली का उपयोग कर सकते हैं।

0

बस रिकॉर्ड के लिए, मैंने वास्तव में एक काफी मजबूत तरीके से django में मैक्रोज़ करने के लिए एक पूर्व-मौजूदा स्निपेट को अनुकूलित करने में थोड़ा सा समय बिताया, यदि आप वास्तव में मैक्रोज़ चाहते हैं तो check it out

सलाह के रूप में, अधिकांश समय आप मैक्रो के साथ क्या करना चाहते हैं, आपको वास्तव में टैग के साथ एक टैग शामिल करना चाहिए; हालांकि, कभी-कभी आप वास्तव में एक मैक्रो चाहते हैं और इसके लिए आपको मेरा जैसे टेम्पलेट टैग लाइब्रेरी का उपयोग करना होगा (जो कुछ ऐसा है जो डीजेंगो के लिए ऐसा करता है)।

संबंधित मुद्दे