2013-06-03 8 views
8

प्रस्तुत करने के लिए कितने स्तर और पृष्ठ को प्रस्तुत करना चाहते हैं, मैं django टेम्पलेट स्तर बनाने में कुछ सलाह लेना चाहता हूं।डीजेगो टेम्पलेट विरासत:

दस्तावेज़ों को पढ़ना, मुझे समझ में नहीं आता कि 2 से अधिक स्तरों के साथ टेम्पलेट पदानुक्रम संरचना कैसे बनाएं।

उदाहरण के लिए, मैं 3 विरासत के स्तर को बनाने के लिए करना चाहते हैं:

  • base.html

    First level 
    {% block level2 %}{% endblock %} 
    
  • base_level2.html:

    base.html 
        └── base_level2.html 
          ├── level2_level3_1.html 
          └── level2_level3_2.html 
    

    यह मेरा कोड है

    {% extends "base.html" %} 
    {% block level2 %} 
        Second level 
        {% block level3_1 %}{% endblock %} 
        {% block level3_2 %}{% endblock %} 
    {% endblock %} 
    
  • level2_level3_1.html

    {% extends "base_level2.html" %} 
    {% block level3_1 %} 
        Third level, part 1 
    {% endblock %} 
    
  • level2_level3_2.html

    {% extends "base_level2.html" %} 
    {% block level3_2 %} 
        Third level, part 2 
    {% endblock %} 
    
  • views.py:

    def myView(request): 
        return render_to_response('level2_level3_1.html', {}, context_instance=RequestContext(request)) 
    

इस तरह से मैं पर निम्नलिखित देख सकते हैं में मेरा ब्राउज़र:

First level 
Second level 
Third level, part 1 

और यह मेरे लिए तार्किक है, क्योंकि मैं केवल level2_level3_1.html पर render_to response कहते हैं।

बेशक, अगर कॉल स्तर 2_level3_2.html, मुझे Third level, part 2 संदेश मिलता है लेकिन Third level, part1 नहीं है।

इसे कैसे हल करें? क्या यह एक अच्छा दृष्टिकोण है? मैंने इस तरह से सामग्री तैयार की है क्योंकि मेरे असली टेम्पलेट्स बहुत बड़े हैं, कोड की बहुत सारी लाइनें हैं, इसलिए मैं कुछ ऑर्डर रखना चाहता हूं। किसी भी सलाह की सराहना की जाएगी।

+0

समस्या क्या है? क्या आप 'तीसरा स्तर, भाग 1' और' तीसरा स्तर, भाग 2' रखना चाहते हैं। आप एक ही पृष्ठ में दोनों भाग क्यों नहीं डाल सकते? वे दो अलग-अलग ब्लॉक से संबंधित हैं। – EsseTi

+0

जैसा कि मैंने उपरोक्त कहा है "मैंने इस तरह से सामग्री तैयार की है क्योंकि मेरे असली टेम्पलेट बहुत बड़े हैं ..."। यह एक न्यूनतम उदाहरण है लेकिन मेरा स्तर 2_level3_1.html और level2_level3_2.html वास्तविकता में बहुत लंबा है और मैं उन्हें एक बड़ी एकल फ़ाइल में विलय नहीं करना चाहता हूं। – caneta

उत्तर

6

यह कहना मुश्किल है कि यह आपके टेम्पलेट की विशिष्ट कार्यक्षमता को जानने के बिना अच्छा या बुरा विचार है या नहीं, लेकिन मेरी तत्काल प्रतिक्रिया यह है कि आप अपने टेम्पलेट को व्यवस्थित करने की कोशिश कर रहे हैं। मुझे लगता है कि ज्यादातर लोग आपको 3-स्तरीय प्रणाली से अधिक दूर करने का आग्रह करते हैं क्योंकि यह वेबसाइट में छोटे बदलाव करने और चीजों को ट्रैक रखने के लिए और अधिक कठिन बनाता है। अजगर के ज़ेन से:

फ्लैट नेस्टेड

की तुलना में बेहतर

सिफारिश Two Scoops of Django में एक 3-स्तरीय प्रणाली के लिए है इस प्रकार है:

  1. प्रत्येक ऐप में एक base_<app_name>.html है टेम्पलेट। ऐप-स्तरीय बेस टेम्पलेट्स एक सामान्य अभिभावक, base.html साझा करते हैं।
  2. ऐप्स के भीतर टेम्पलेट्स एक सामान्य पैरेंट बेस_ <app_name> .html टेम्पलेट साझा करते हैं।
  3. base.html के रूप में एक ही स्तर पर किसी भी टेम्पलेट base.html विरासत

और अपने नामकरण स्कीमा के लिए, यह इस प्रकार दिखाई देंगे:

| Templates/ 
    |--base.html 
    |--someothertemplate.html # extends base.html 
    |--level2/ 
    |----base_level2.html  # extends base.html 
    |----level2_1.html  # extends base_level2.html 
    |----level2_2.html  # extends base_level3.html 

संपादित करें: और वहाँ कोई वास्तविक इसके लिए कारण:

Second level 
    {% block level3_1 %}{% endblock %} 
    {% block level3_2 %}{% endblock %} 

जहां प्रत्येक ब्लॉक एक टेम्पलेट की सामग्री को संदर्भित करता है। आप की तरह

{% block level3 %}{% endblock level3%} 

और फिर स्तर 3 टेम्पलेट्स में से प्रत्येक में एक ब्लॉक करने के लिए को सरल बनाने वाली, तदनुसार ब्लॉकों का नाम बदलने

+0

ठीक है, इसलिए स्तरीय स्तर 3 का कोई तरीका नहीं है, भले ही यह हजारों लाइनें लंबी हो? – caneta

+0

क्या आप "विभाजित स्तर" से क्या मतलब समझ सकते हैं? क्या वे स्तर एक ही पृष्ठ पर दिखाए जाते हैं? और आप बस अपने पेज को काटने की कोशिश कर रहे हैं तो इसे प्रबंधित करना आसान है? यदि आपका टेम्पलेट हजारों लाइनों लंबा है, तो आप शायद कुछ गलत कर रहे हैं। आपको कोड लिखना चाहिए जो आपके लिए एचटीएमएल उत्पन्न करता है। – skzryzg

+0

यह "विभाजित स्तर" नहीं है, लेकिन कैसे विभाजित करें ................ स्तर 3। हां ये स्तर उसी पृष्ठ पर दिखाई देते हैं, जैसा कि उदाहरण में दिखाया गया है। हां, मैं अपने पेज को काटना चाहता हूं ताकि इसे प्रबंधित करना आसान हो। मेरा टेम्पलेट हजारों लाइन लंबा है क्योंकि यह बहुत बड़ा और जटिल है, क्योंकि मैं डीजेगो सुविधाओं, टेम्पलेट टैग आदि का उपयोग नहीं करता हूं ... – caneta

3
नहीं

शायद यह ऐसा करने का सबसे अच्छा तरीका है, लेकिन आप उपयोगकर्ता हो सकता है includehttps://docs.djangoproject.com/en/dev/ref/templates/builtins/#include

के लिए base_level2.html

{% extends "base.html" %} 
{% block level2 %} 
Second level 
{% include "level2_level3_1.html" %} 
{% include "level2_level3_2.html" %} 
{% endblock %} 

कुछ इस तरह मैं इस यकीन है कि यह काम करता है परीक्षण नहीं किया है, इसलिए नहीं।

और btw:

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

+0

हां, यह उस खंड के लिए है जिसमें मैंने टैग शामिल नहीं किया था। – caneta

+0

लेकिन आपको जो चाहिए वह करना चाहिए, आप पैरामीटर भी पास कर सकते हैं। – EsseTi

+0

ठीक है, मैं इसे आज़मा दूंगा, धन्यवाद! – caneta

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