2012-08-23 7 views
25

मैं django टेम्पलेट में किसी स्थिति के अंदर एक ब्लॉक को कॉल करने का प्रयास कर रहा हूं।किसी स्थिति के अंदर कॉलिंग ब्लॉक: django टेम्पलेट

मेरे पास base template है। मेरे पास कई अन्य टेम्पलेट्स हैं जो आधार टेम्पलेट का विस्तार करते हैं। मैं आधार टेम्पलेट में एक ब्लॉक को परिभाषित किया है:

{% block test_block %}Test{% endblock %} 

मैं तो अन्य टेम्पलेट में एक निश्चित शर्त पर इस ब्लॉक ओवरराइड करना चाहते। अगर स्थिति विफल हो जाती है, तो ब्लॉक को ओवरराइड नहीं किया जाना चाहिए। यह कुछ है जो मैंने लिखा है:

{% if test_value %}{% block test_block %}Development{% endblock %}{% endif %} 

यह वास्तव में (या वास्तव में हो सकता है) अगर स्थिति को अनदेखा करता है।

क्या मैं अंत में क्या किया:

{% block test_block %}{% if test_value %}Development{% else %}{{ block.super }}{% endif %}{% endblock %} 

मैं इस हर जगह यह आवश्यक था की तरह कुछ करना था।

क्या यह सबसे अच्छा तरीका है? क्या यह एकमात्र तरीका है? मैं अपने पहले तरीके का प्रयास क्यों नहीं कर सकता? या मेरी तरफ से कोई गलती है?

+0

आपका django संस्करण क्या है? –

+0

यह भी देखें http://stackoverflow.com/questions/942797/why-cant-i-nest-a-block-tag-inside-an-if-tag – Bryce

+0

धन्यवाद मैं घंटों के लिए इस पर अपना सिर मार रहा हूं – pmont

उत्तर

13

आपने कोई गलती नहीं की है - टेम्पलेट ब्लॉक को उनके आस-पास की किसी भी शर्त के बावजूद शामिल किया गया है।

self.blocks = dict([(n.name, n) for n in nodelist.get_nodes_by_type(BlockNode)]) 

जब {% extends %} गाया जा रहा है, यह प्रतिपादन जब जनक जाता है के लिए सीधे टेम्पलेट से सभी ब्लॉक नोड्स और उन्हें दुकानों को हासिल करेगा: आप Django source code में django/template/loader_tags.py की ExtendsNode वर्ग की इस पंक्ति से देख सकते हैं उन block एस। क्या बच्चे में उन ब्लॉक सशर्त के अंदर थे या नहीं माना जाता है।

+0

क्या इसके समाधान की कोई युक्ति है? – jsmedmar

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