2009-11-12 9 views
95

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

उत्तर

4

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

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

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

सीएफ। Django मुद्दे #7324, #12008, #13399 और related update to the documentation। सी एफ include tag ध्यान दें:

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

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

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

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