2013-01-03 30 views
10

मैं जो कुछ 'यादृच्छिक' एचटीएमएल कोड है एक base.html फ़ाइल है और मैं निम्नलिखित कोड है:प्रत्येक टेम्पलेट के लिए स्थिरता क्यों लोड की जाती है भले ही इसे विस्तारित किया जाए?

{% load staticfiles %} 
<!DOCTYPE html> 
<html> 
    <head> 
     ... 
    {% block extra_js_top %}{% endblock %} 
    </head> 
    ... 
</html> 

मेरी index.html फ़ाइल में मैं base.html विस्तार और मैं कुछ अतिरिक्त जावास्क्रिप्ट फ़ाइलें लोड:

{% extends "base.html" %} 
... 
{% block extra_js_top %} 
    <script type="text/javascript" src="{% static "js/somejs.js" %}"></script> 
{% endblock %} 

समस्या लो कि अतिरिक्त जावास्क्रिप्ट नहीं है स्थैतिक var की वजह से विज्ञापन। यह तब भी लोड नहीं होता है जब मैं base.html का विस्तार करता हूं जिसमें टेम्पलेट के अंदर {% load staticfiles %} है। अंत में मैंने {% load staticfiles %}index.html पर एक और {% load staticfiles %} जोड़ने में समस्या हल की।

मेरा प्रश्न यह है कि हम प्रत्येक टेम्पलेट के लिए {% load staticfiles %} क्यों जोड़ना चाहते हैं, भले ही हम पहले से मौजूद फ़ाइल का विस्तार करते हैं?

उत्तर

6

अनुसार Django के नवीनतम documentation, इस रख-रखाव और विवेक की खातिर

जब आप कोई कस्टम टैग या फिल्टर लाइब्रेरी लोड, टैग/फिल्टर ही उपलब्ध वर्तमान में किए जाते हैं के लिए किया जाता है टेम्पलेट - टेम्पलेट-विरासत पथ के साथ कोई माता-पिता या बच्चा टेम्पलेट्स नहीं।

उदाहरण के लिए, यदि एक टेम्पलेट foo.html है {% लोड मानवीयकरण%}, एक बच्चे टेम्पलेट (जैसे, एक है कि {% फैली "foo.html"%}) मानवीय बनाने के लिए पहुंच प्राप्त नहीं होगी टेम्पलेट टैग और फिल्टर। बाल टेम्पलेट अपने स्वयं के {% लोड मानवता%} के लिए ज़िम्मेदार है।

यह रखरखाव और स्वच्छता के लिए एक विशेषता है।

+1

यह स्वीकार्य उत्तर होना चाहिए – Steve

3

क्योंकि टेम्पलेट टैग काम करने का तरीका है। आपको प्रत्येक लाइब्रेरी फ़ाइल को उन सभी टेम्पलेट फ़ाइल के लिए लोड करने की आवश्यकता है जो उनका उपयोग करते हैं।

+2

लेकिन मैं एक टेम्पलेट का विस्तार करता हूं जिसमें लोड शामिल है। यदि प्रत्येक टेम्पलेट में लाइब्रेरी लोड करने के बजाय पूर्ण विरासत काम करती है तो बेहतर नहीं होगा? – dastergon

0

यह तर्कसंगत है कि आपको {% load staticfiles %} की आवश्यकता होगी जहां भी आप यूआरएल विस्तार चाहते हैं। यदि आपके पास base.html & index.html दोनों में हो रहा है, तो आपको इसे दोनों स्थानों पर शामिल करना होगा (जैसा कि आप पहले ही अनुमान लगा चुके हैं)।

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

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