क्या हम अधिलेखित करने के बजाय एक {% ब्लॉक%} के लिए अपील कर सकते हैं?


116

मेरे Core.html में मेरे पास जावास्क्रिप्ट लेबल वाला एक ब्लॉक है। यह बहुत अच्छा होगा अगर मैं इसमें सब कुछ ओवरराइट किए बिना इस ब्लॉक में अधिक लाइनें जोड़ सकता हूं।

जवाबों:



9

का उपयोग करते हुए block.superजब एक यानी सहित खाके का विस्तार नहीं बल्कि साथ ही काम करता है ठीक:

{% extends "base.html" %} vs. {% include "partial.html" %}

मान लें कि आप अपने पेज के बीच में एक टेम्प्लेट शामिल करना चाहते हैं और आप यह भी चाहेंगे कि पेज के अंत में एक ब्लॉक में कुछ जावास्क्रिप्ट जोड़ें: block.superशामिल किए गए टेम्प्लेट में कॉल करना क्रैश हो जाएगा।

सी एफ Django # 7324 , # 12008 , # 13399 और प्रलेखन से संबंधित अद्यतन जारी करता है । सी एफ टैग नोट शामिल करें :

शामिल टैग को "इस सबटेम्पलेट को प्रस्तुत करना और HTML को शामिल करना" के कार्यान्वयन के रूप में माना जाना चाहिए, न कि "इस उपशीर्षक को पार्स करें और इसकी सामग्री को शामिल करें जैसे कि यह माता-पिता का हिस्सा था"। इसका मतलब यह है कि इसमें शामिल टेम्पलेट्स के बीच कोई साझा स्थिति नहीं है - प्रत्येक शामिल पूरी तरह से स्वतंत्र प्रतिपादन प्रक्रिया है।

ब्लॉक शामिल किए जाने से पहले मूल्यांकन किया जाता है। इसका मतलब यह है कि एक टेम्पलेट जिसमें दूसरे से ब्लॉक शामिल हैं, में ऐसे ब्लॉक होंगे जिनका पहले से ही मूल्यांकन किया गया है और प्रदान किया गया है - वे ब्लॉक नहीं जिन्हें ओवरराइड किया जा सकता है, उदाहरण के लिए, एक विस्तारित टेम्पलेट।

उस स्थिति में मैं django-sekizai का उपयोग करने की सलाह दूंगा , जो आपको ऐसा करने की अनुमति देगा:

{% load sekizai_tags %}

                                  <p>Some content</p>
<p>Some content</p>             | {% addtoblock "js" %}
                                |   <script type="text/javascript">
{% include "partial.html" %} ->      alert("Hello django-sekizai");
                                |   </script>
<p>Some more content</p>         {% endaddtoblock %}


{% render_block "js" %}

से Django-sekizai README :

मैंने इस परियोजना को शुरू करने का मुख्य कारण django और django-cms में एक अच्छे मीडिया (css / js) ढांचे की कमी थी। हाँ वहाँ django में रूपों में मीडिया वर्ग का उपयोग किया जाता है, लेकिन वास्तव में यह अच्छी तरह से काम नहीं करता है। आमतौर पर सामने वाले लोग शामिल किए जाने के लिए सीएसएस और जावास्क्रिप्ट फ़ाइलों पर निर्णय लेना चाहते हैं और वे इसे बदलने के लिए अजगर फ़ाइलों को संपादित करना नहीं चाहते हैं और न ही मैं चाहता हूं कि वे मेरी पायथन फ़ाइलों को बदल दें। इसके लिए आपको उस टेम्पलेट की सामग्री को संपादित करने की अनुमति देने की आवश्यकता थी जो उस बिंदु से पहले या बाद में है जहां अब आप हैं। इसके अलावा मैं चाहता था कि डुप्लिकेट को हटा दिया जाए। परिणामस्वरूप मैंने django-sekizai लिखा, जो ठीक यही करता है। यह ब्लॉकों के समान है, बस उन्हें विरासत में लेने के बजाय, आप उन्हें बढ़ाते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.