python - Whats the best way to duplicate data in a django template? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 13 उत्तर
  & lt; html & gt ; & Lt; शीर्ष & gt; & Lt; शीर्षक & gt; {% block title%} {% endblock%} & lt; / title & gt; & Lt; / head & gt; & LT; बॉडी & gt; & Lt; h1 & gt; {% ब्लॉक शीर्षक%} {% endblock%} & lt; / h1 & gt; & Lt; / body & gt; & Lt; / html & gt;  

यह मेरा टेम्पलेट है, अधिक या कम एच 1 हेडिंग हमेशा शीर्षक टैग के समान है। कोड का उपरोक्त स्निपेट मान्य नहीं है क्योंकि समान नाम के साथ दो ब्लॉक नहीं हो सकते। मैं खुद को दोहराए बिना इसे कैसे प्रबंधित कर सकता हूं?


स्पष्ट करने के लिए संपादित करें: मेरे पास एक टन बच्चे टेम्पलेट हैं जो इस टेम्पलेट से विरासत में मिलते हैं, और इस प्रकार एक नया {{title}} चर बनाने के लिए प्रत्येक टेम्पलेट एक बहुत अच्छा समाधान नहीं है पहले मैंने इसे इस तरह सेट किया था:

base.html:

  & lt; शीर्षक & gt; {% block title%} {% endblock%} & lt; / title & gt;  

फिर base_view.html (base.html) को विस्तारित करें:

  & lt; h1 & gt; {% block title%} {% endblock%} & lt; / h1 & gt; तब base_object.html (विस्तारित base_view.html) में:  
  {% block title%} मेरा शीर्षक यहां जाता है {% endblock%}  

कोड>

और यह सिर्फ किसी तरह काम करता है मैंने अपने टेम्पलेट्स को फिर से संशोधित किया है, इसलिए सिर्फ आधार.html और base_object.html मैं यह कार्यक्षमता कैसे वापस कर सकता हूं?

"post-text" itemprop = "text"> < P> ऐसा लगता है कि आपका लेआउट ठोस है आपके पास एक base.html टेम्पलेट है जो आपके ऐप के प्रत्येक पृष्ठ के लिए मूल संरचना और बाहरी लेआउट को परिभाषित करता है। आपके पास base_object.html भी है, जो इस टेम्पलेट को बढ़ाता है।

आप चाहते हैं कि प्रत्येक पृष्ठ को एक अद्वितीय शीर्षक और एक मिलान h1 (मुझे लगता है) चाहते हैं। ऐसा करने का सबसे अच्छा तरीका अपने base.html टेम्पलेट में दो अलग-अलग ब्लॉकों को परिभाषित करना है।

  & lt; html & gt; & Lt; शीर्ष & gt; & Lt; title & gt; {% block title%} डिफ़ॉल्ट शीर्षक {% endblock%} & lt; / title & gt; & Lt; / head & gt; & LT; बॉडी & gt; & Lt; h1 & gt; {% ब्लॉक h1%} {% endblock%} & lt; / h1 & gt; & Lt; / body & gt; & Lt; / html & gt;  

अपने बच्चे के टेम्पलेट में, आपको इन दोनों को ओवरराइड करना होगा यदि आप चाहते हैं कि वे समान हों मुझे पता है कि आपको लगता है कि यह प्रति-सहज ज्ञान युक्त है, लेकिन डीजेंगो में टेम्प्लेट विरासत को संभाला जाने के कारण आवश्यक है।

स्रोत:

अंत में, ध्यान दें कि आप कर सकते हैं एक ही टेम्पलेट में एक ही नाम के साथ एकाधिक {% block%} टैग को परिभाषित नहीं करें यह सीमा मौजूद है क्योंकि ब्लॉक टैग "दोनों" दिशाओं में काम करता है यही है, एक ब्लॉक टैग को भरने के लिए सिर्फ एक छेद नहीं प्रदान करता है - यह उस सामग्री को भी परिभाषित करता है जो माता-पिता में छेद को भरता है अगर टेम्पलेट में समान रूप से नामित दो कोड होते हैं, तो टेम्पलेट के माता-पिता को यह नहीं पता होगा कि कौन सी ब्लॉकों की सामग्री का उपयोग करना है।

< P> बच्चों को इस तरह दिखते हैं:

  {% "base.html"%} विस्तारित {% ब्लॉक शीर्षक%} शीर्षक {% endblock%} {% block h1%} शीर्षक {% endblock %}  

यदि यह आपको परेशान करता है, तो आपको टेम्पलेट चर के रूप में प्रत्येक वस्तु के लिए दृश्य से शीर्षक सेट करना चाहिए।

  {% block title%} {{Title}} {% endblock%} {% block h1%} {{title}} {% endblock%}  

डीजेन्ग टेम्पलेट परत से अधिक तर्क रखने के लिए प्रयास करता है मुमकिन। अक्सर एक शीर्षक डेटाबेस से गतिशील रूप से निर्धारित होता है, इसलिए दृश्य परत इस जानकारी को प्राप्त करने और सेट करने के लिए सही जगह है। यदि आप डिफ़ॉल्ट शीर्षक (शायद base.html में सेट करते हैं, या आप django.contrib से साइट के नाम को पकड़ सकते हैं) को स्थगित करना चाहते हैं, तो भी आप शीर्षक को खाली छोड़ सकते हैं .साइट पैकेज)

इसके अलावा {{block.super}} काम में आ सकता है। यह आपको बच्चे से अतिरिक्त सामग्री के साथ मूल ब्लॉक की सामग्री को गठबंधन करने की अनुमति देगा। तो आप आधार में "Stackoverflow.com" जैसे शीर्षक को परिभाषित कर सकते हैं, और

  {% block title%} {{block.super}} सेट कर सकते हैं - एक प्रश्न पूछें {% endblock%}  

"Stackoverflow.com - एक प्रश्न पूछें" जैसे एक शीर्षक पाने के लिए बच्चे में


Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -