2012-06-02 10 views
16

योdjango एकाधिक टेम्पलेट विरासत - क्या यह सही शैली है?

तो मैं एक base.html है:

<html> 
    <body> 
     <div id="header"> ... </div> 
     {% block main %}{% endblock %} 
     <div id="footer"> ... </div> 
    </body> 
</html> 

और मैं भी एक पृष्ठ है कि प्रयोक्ता के पोस्ट से पता चलता है:

{% extends base.html %| 
{% block main%} 
    <h1>welcome to yours posts hangout!</h1> 

     ... snazzy code here that shows all the posts ... 

{% endblock%} 

अब, समस्या यह है, हो सकता है मैं एक और है इस तरह का पृष्ठ:

{% extends base.html %| 
{% block main%} 
    <h1>look at all posts by all users!</h1> 

     ... snazzy code here that shows all the posts by all the users ... 

{% endblock%} 

क्योंकि हम सभी मेन्सा से संबंधित हैं, हम देख सकते हैं मेरे पास स्नैज़ी कोड दोहराया जा रहा है - दो बार (ट्यूटोलॉजिकल मज़े के लिए!)

मैं इस कोड को दोहराना नहीं चाहता - मेरा मतलब है, अगर यह एक बड़ी परेशानी होगी, लेकिन अन्यथा मैं चाहता हूं एक पृष्ठ की तरह जिसमें स्नैज़ी कोड परिभाषित किया गया है, और उसके बाद ऊपर दिए गए छोटे परिवर्तनों और (संभवतः) को नीचे छोड़ दें।

टेम्पलेट्स की मेरी समझ कमजोर है - मुझे लगता है कि यह करने के लिए यह तरीका है, क्या एक बेहतर/मानकीकृत तरीका है?

snazzy.html:

{% extends base.html %| 
    {% block aboveSnazzy%} 
    {% endblock %} 

     ... snazzy code here that shows all the posts by all the users ... 

    {% block belowSnazzy%} 
    {% endblock %} 
{% endblock%} 

और उसके बाद अलग अलग टुकड़ों में से प्रत्येक के लिए, मैं हो सकता है:

usersArea.html:

{% extends snazzy.html %| 
    {% block aboveSnazzy%} 
     <h1>welcome to yours posts hangout!</h1> 
    {% endblock %} 


    {% block belowSnazzy%} 
     <h1>i didn't think this far ahead in the example</h1> 
    {% endblock %} 
{% endblock%} 

आदि आदि अन्य टुकड़े के लिए भी !

ठीक है, तो मुझे पता है कि मैं सिर्फ एक अलग शीर्षलेख के साथ पैरामीटर में भेज सकता हूं या आप क्या कर सकते हैं - आइए दिखाएं कि उपरोक्त स्नैज़ी सामान है, मुझे नहीं पता, कुछ अन्य टेम्पलेट दिखा रहा है जो मैं चाहता हूं या कुछ कर रहा हूं गैर तुच्छ। क्या मैंने इसे करने के लिए "रास्ता" से ऊपर विस्तृत किया है?

चीयर्स!

उत्तर

19

यो। :-)

उत्तर इस बात पर निर्भर करता है कि आपके टेम्पलेट्स में कितना आम है।

  • अगर आपके टेम्पलेट्स, आम में एक बहुत है, उदाहरण के लिए वे आपकी साइट के कुछ भाग के पन्नों रहे हैं, या बस बहुत ही आम strucure है, जिस तरह से आप वर्णित सबसे अच्छा है। एक और आधार टेम्पलेट बनाएं, अधिक ब्लॉक जोड़ें और इसे फॉर्म बनाएं। मैं तो बस लगता है कि तुम, उदाहरण के

    के लिए
    {% extends base.html %| 
    {% block page_heading %}{% endblock %} 
        ... snazzy code here that shows all the posts by all the users ... 
    {% block extra_content %}{% endblock %} 
    
  • ब्लॉक के लिए कुछ और वर्णनात्मक नाम का उपयोग करना चाहिए अगर आपके टेम्पलेट्स आम में गूदा नहीं है, लेकिन शेयरों सामग्री के कुछ विशिष्ट ब्लॉक, यह एक स्थिति है। यहां उचित विरासत संरचना बनाना मुश्किल है। तो आप यहां {% include %} का उपयोग कर सकते हैं: उदाहरण के लिए, एक और टेम्पलेट बनाएं जो पोस्ट दिखाता है (स्नैज़ी कोड जो सभी पोस्ट दिखाता है), _list_posts.html कहें। आप एक और टेम्पलेट बना सकते हैं जो पोस्ट दिखाता है (स्नैज़ी कोड जो सभी पोस्ट दिखाता है), उदाहरण के लिए _list_posts.html। फिर इसे बच्चों के टेम्पलेट्स में उपयोग करें।

    {% extends base.html %| 
    {% block main%} 
    <h1>welcome to yours posts hangout!</h1> 
    {% include '_list_posts.html' %} 
    {% endblock%} 
    

    तुम भी उस के लिए inclusion tag उपयोग कर सकते हैं।

चुनने का किस तरीका? प्रश्न का उत्तर देने का प्रयास करें: इन दो टेम्पलेट्स में सामान्य पूर्वजों को (और चाहिए) कर सकते हैं? यदि हां, तो पहले बदलाव के लिए जाएं, यदि नहीं - तो दूसरे के लिए।

+0

धन्यवाद! मुझे शामिल/समावेशन टैग के बारे में पता नहीं था। मैं उन्हें देख लूंगा! – bharal

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