2009-12-14 10 views
19

मेरी Django अनुप्रयोग में master टेम्पलेट इस तरह दिखता है:नेस्टेड ब्लॉकों

{% block parent %} 
    Some text... 
    {% block child %} 
     Default content here... 
    {% endblock child %} 
    ...some more text 
{% endblock parent %} 

अब, इस टेम्पलेट एक तरह से ओवरराइट किया जाना चाहिए कि child ब्लॉक बदल गई है:

{% extends "master.html" %} 

{% block child %} 
    New content here... 
{% endblock child%} 

हालांकि, प्रतिपादन वही रहता है (प्रिंटिंग "यहां डिफ़ॉल्ट सामग्री ...")। क्या मुझे कुछ स्पष्ट याद आया है या नेस्टेड ब्लॉक संभव नहीं हैं? मैं Django 1.1 के साथ काम कर रहा हूँ, कि अगर मायने रखती है:

संपादित करें (या, सूखी सिद्धांत का उल्लंघन है, मैं parent ब्लॉक फिर से परिभाषित करने के लिए है?)।

+2

कुछ और गलत है, क्योंकि (1.1 का उपयोग भी) मैं इस समस्या को दोहराने में असमर्थ हूं। मेरे लिए, बाल ब्लॉक को किसी भी संदर्भ के बिना, बाल ब्लॉक को ओवरराइड करना, वांछित प्रभाव है। –

+0

हाँ, आप सही हैं। नीचे मेरा जवाब देखें। इसे देखने के लिए धन्यवाद। – Boldewyn

उत्तर

9

ठीक है, यह Django के टेम्पलेट प्रणाली में एक बग है। ज्यादातर अन्य मामलों के लिए, बेन जेम्स सही है (उपरोक्त मेरे प्रश्न पर उनकी टिप्पणी देखें)।

मेरे मामले में, child ब्लॉक एक {% ifnotequal a b %} ब्लॉक के अंदर था, और कि टूटता ब्लॉक विरासत। मैं मानता हूं कि एक बग होने के कारण, ऐसे परिचालनों के लिए दर्जनों प्राकृतिक उपयोग के मामले हैं।

The corresponding ticket

+1

यह मानना ​​अच्छा है कि आप जिस कोड को पोस्ट कर रहे हैं उसे हमेशा _test_ करना है, यह मानने के बजाय कि आपने जो किया है, वह परिणाम को प्रभावित नहीं करेगा। –

+0

सच है, सच है ... मेरे पास पहली बार एक कस्टम टेम्पलेट टैग था और संदेह था कि, लेकिन इसे फेंकने के बाद मैंने ifnotequal के बारे में नहीं सोचा था। – Boldewyn

1

यह करें:

{% extends "master.html" %} 

{% block parent %} 
    {% block child %} 
     New content here... 
    {% endblock child%} 
{% endblock parent %} 
+3

क्या होगा यदि आधार 'पैरेंट' ब्लॉक में 'बच्चे' ब्लॉक के अलावा कुछ और है? –

+2

उत्तर के लिए धन्यवाद, लेकिन दुर्भाग्य से यह उपयोगी नहीं है। यह आंशिक रूप से मेरी गलती है, मैंने उपरोक्त मास्टर टेम्पलेट के लिए उदाहरण अपडेट किया है। समस्या: मास्टर टेम्पलेट का कारण यह है कि इसमें अधिक डेटा है। यदि आप सुझाव देते हैं तो मैं करता हूं, यह सब अतिरिक्त डेटा निश्चित रूप से खो गया है। – Boldewyn

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