2010-10-21 12 views
11

अधिक स्पष्ट रूप से मेरे सवाल समझने के लिए, मैं सामग्री के साथ एक include.html टेम्पलेट लगता है:Django टेम्पलेट: क्यों शामिल टेम्पलेट में ब्लॉक बाल टेम्पलेट द्वारा ओवरराइट नहीं किया जा सकता है?

{% block test_block %}This is include{% endblock %} 

मैं इस तरह की सामग्री के साथ parent.html नामक एक और टेम्पलेट है:

This is parent 

{% include "include.html" %} 

अब मैं parent.html को बढ़ाए गए एक टेम्पलेट नामक child.html बनाएं:

{% extends "parent.html" %} 
{% block test_block %}This is child{% endblock %} 

मेरा विचार यह है कि child.html को प्रस्तुत करते समय, ch में test_block ild.html include.html में से एक को ओवरराइट कर सकता है। मेरी समझ के अनुसार, जब एक टेम्पलेट शामिल किया गया है, तो यह शामिल है। तो मेरे मामले में, मुझे लगता है कि parent.html के बराबर है:

This is parent 

{% block test_block %}This is include{% endblock %} 

तो child.html test_block को ओवरराइट करने में सक्षम होना चाहिए। लेकिन ऐसा लगता है कि यह नहीं कर सकता है। क्यूं कर? क्या आसपास कोई काम है?

उत्तर

13

जब आप टेम्पलेट शामिल करते हैं, तो यह टेम्पलेट प्रस्तुत करता है, फिर प्रस्तुत सामग्री शामिल करता है।

Django डॉक्स से

:

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

का संभावित हल बच्चे टेम्पलेट का विस्तार शामिल बजाय टेम्पलेट सहित टेम्पलेट के लिए किया जाएगा। फिर, बच्चे टेम्पलेट शामिल करें।

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