2009-02-23 11 views
11

मैं एक ब्लॉग एप्लिकेशन पर काम कर रहा हूं, और मैं एक साइडबार चाहता हूं जिसमें अभिलेखागार पृष्ठों के लिंक प्रदान करने के लिए ब्लॉग मौजूद सभी महीनों की एक सूची शामिल है। इसके अलावा, मैं टेम्पलेट में हार्डकोडिंग के बजाए महीने बदलते समय इसे स्वचालित रूप से अपडेट करना चाहता हूं। बेशक, जहां तक ​​मैं कह सकता हूं, इसका मतलब है कि मुझे में व्यू में महीनों की सूची की गणना करना होगा, और प्रत्येक दृश्य से प्रत्येक टेम्पलेट में इसे पास करना होगा।मैं Django में सभी विचारों से एक मानक, स्थैतिक चर कैसे पारित कर सकता हूं?

यदि संभव हो तो मैं इससे बचना चाहूंगा। क्या सूची को गणना करने का कोई तरीका है और इसे प्रत्येक टेम्पलेट पर स्वचालित रूप से लागू करने के लिए, प्रत्येक दृश्य से टेम्पलेट में स्पष्ट रूप से पास किए बिना?

उत्तर

17

चाहते आपकी समस्या का कुछ संभव समाधान कर रहे हैं।

यदि आप वास्तव में पर अपनी साइट पर पृष्ठ पर context processor पृष्ठ पर रखना चाहते हैं तो शायद आपकी सबसे अच्छी पसंद है। संदर्भ प्रोसेसर सभी टेम्पलेट संदर्भों में डेटा इंजेक्ट करने का मूल तरीका हैं। ध्यान रखें कि संदर्भ प्रोसेसर पर प्रत्येक अनुरोध पर कॉल किया जाएगा।

एक वैकल्पिक समाधान custom template tag बनाना होगा और उन सभी पृष्ठों के लिए साझा बेस टेम्पलेट पर इसका उपयोग करना होगा, जिन्हें आप अपनी साइडबार चाहते हैं। टेम्पलेट टैग बनाने के लिए थोड़ा अधिक जटिल हैं लेकिन वे अधिक लचीला हैं।

किसी भी समाधान के साथ आपको Django के cache framework पर भी देखना चाहिए। कैश फ्रेमवर्क प्रत्येक अनुरोध पर कुछ काम बचाने के लिए थोड़ी देर के लिए अस्थायी रूप से आपके गणना मूल्यों को स्टोर करना बहुत आसान बनाता है।

+1

+1। जब तक यह एक मूल्य नहीं है, आप साइट पर शाब्दिक रूप से प्रत्येक पृष्ठ पर उपयोग करेंगे, यह संदर्भ प्रोसेसर की तुलना में बेहतर दृष्टिकोण है। –

4
+0

आप बहुत ज्यादा जानते हैं। :) – fuentesjr

+0

-1 स्पष्ट रूप से भ्रमित मिडलवेयर और टेम्पलेट संदर्भ प्रोसेसर के लिए, जिसका एक दूसरे के साथ कुछ लेना देना नहीं है। –

+0

@ करल मेयर: मुझे लगता है कि भेद कृत्रिम है, लेकिन मैं सही खड़ा हूं। एक कस्टम टेम्पलेट टैग का उल्लेख करने के लिए –

0

Django के टेम्पलेट विरासत को इसमें शामिल होना चाहिए। आप एक आधार टेम्पलेट बना सकते हैं जो आपकी साइडबार कार्यक्षमता को संभालता है। आपके अन्य विचार इस टेम्पलेट का विस्तार करते हैं।

खाका विरासत: जैसा कि पहले उल्लेख और template fragment caching चाल करना चाहिए के रूप में कस्टम टेम्पलेट टैग की http://www.djangobook.com/en/1.0/chapter04/#s-template-inheritance

+0

मैं पहले ही टेम्पलेट विरासत का उपयोग करता हूं। यह मुझे प्रत्येक दृश्य से चर को टेम्पलेट में पास करने से कैसे रोक देगा? – mipadi

+0

क्षमा करें, ऊपर दिए गए उत्तर में जोड़ने का मतलब है कि आप उस महीने के पहले भाग पर चलने वाली बाहरी स्क्रिप्ट से बेस टेम्पलेट जेनरेट/संशोधित कर सकते हैं। खंड कैशिंग के लिए – Harold

0

एक संयोजन।

+0

+1। बेशक, आपको अभी भी खंड को डेटा प्राप्त करना होगा, यह पुराना होना चाहिए। हमने कार्यों में गुजरने की अनुमति देने के लिए टेम्पलेट कोड में परिवर्तनीय लुकअप को ठीक किया है। समारोह (करीबी तो इसके पैरा को पारित करने की आवश्यकता नहीं है) केवल खंड पुनर्जन्म के दौरान बुलाया जाता है। –

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