2010-12-31 12 views
41

मेरी प्रोजेक्ट सेट अप करते समय और ऐप्स को गैर-निर्भर रखने के लिए काम करते हुए, मैंने एक स्नैग मारा है। मैं अलग-अलग ऐप्स से सभी टेम्पलेट्स को लगातार हेडर और फ़ूटर रखना चाहता हूं। यहां मैं कोशिश कर रहा हूं:django में किसी अन्य ऐप से टेम्पलेट शामिल है

myproject/ 
     base/ 
      templates/ 
         header.html 
         footer.html 
     app1/ 
      templates/ 
         my_app1_page.html -> want to include 'header.html' 
              and 'footer.html' from base app 

दिखाएं कि ऐसे कई ऐप्स भी हैं जो इसे भी करना चाहते हैं। क्या यह संभव है और/या इसे करने का सही तरीका है?

उत्तर

73

जब तक क्षुधा INSTALLED_APPS में हैं और क्षुधा dirs के लिए टेम्पलेट लोडर सक्षम किया गया है, तो आप एक और ऐप्स से कोई भी टेम्पलेट, यानी शामिल कर सकते हैं:

{% include "header.html" %} 

... के बाद से अपने टेम्पलेट में सीधे स्थित हैं आपके ऐप के टेम्पलेट्स डीआईआर।

app1/ 
    templates/ 
     app1/ 
      page1.html 
      page2.html 
app2/ 
    templates/ 
     app2/ 
      page1.html 
      page2.html 

और {% include "app1/page1.html" %} या {% include "app2/page1.html" %} ...

लेकिन: आम तौर पर, आदेश के नाम से बचने के लिए संघर्ष बेहतर उपयोग करने के लिए है एक सुसंगत देखो रखने के लिए और लग रहा है, यह और भी बेहतर है समावेशन के बजाय टेम्पलेट विरासत का उपयोग करने के लिए। टेम्पलेट विरासत में से एक है जो वास्तव में अच्छी चीजें Django टेम्पलेट सिस्टम के हैं, जब भी यह समझ में आता है तो अधिकतर समावेशन का चयन करें (अधिकांश समय)।

मेरे सिफारिशें:

  • अपनी परियोजना के लिए एक आधार टेम्पलेट है शीर्ष लेख और पाद और अपने मुख्य सामग्री के लिए एक {%block content%} साथ ("base.html" डिफ़ॉल्ट सम्मेलन है)।
  • अपने अन्य टेम्पलेट्स रूप base.html {% extends "base.html" %} वारिस और सामग्री अनुभाग

ओवरराइड दस्तावेज़ के लिंक

+1

जोर से और स्पष्ट, यही वह जवाब है जिसे मैं ढूंढ रहा था। – Scott

9

जबकि आप निश्चित रूप से include tag का उपयोग करके और पूर्ण पथ निर्दिष्ट करके कर सकते हैं, Django में काम करने का उचित तरीका Template inheritance का उपयोग कर है।

+1

+1 टेम्पलेट विरासत के लिए इस सवाल का एक और प्रतिक्रिया देखें है –

+0

क्या होगा यदि मैं कुछ मॉडल है और उस मॉडल को प्रस्तुत करने के लिए आंशिक टेम्पलेट - उदाहरण के लिए पता, घटना? मुझे लगता है कि इस तरह के परिदृश्य में समावेश शामिल है। – quapka

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