2013-10-24 10 views
6

में वैश्विक डेटा और फ़ंक्शंस का खुलासा करते हुए मेरे पास एक लॉग टेम्पलेट है जब उपयोगकर्ता लॉग इन होता है, और उस बेस टेम्पलेट पर, मुझे ड्रॉप डाउन मेनू में उपयोगकर्ता विशिष्ट विकल्प जोड़ने की आवश्यकता होती है। विकल्पों के साथ यह ड्रॉप डाउन मेनू सभी हैंडलरों में निरंतर होना चाहिए, यानी, किसी भी समय बेस टेम्पलेट को बच्चे टेम्पलेट के साथ (विस्तारित) लगाया जाना चाहिए।पिरामिड और जिनजा 2 टेम्पलेटिंग

आवश्यक डीबी क्वेरी करने के अलावा, क्वेरी परिणामों को एक चर के लिए असाइन करना, और उस हैंडल को प्रत्येक हैंडलर में पास करना (कई हैं), मैं इसे एक क्वेरी और एक चर में कैसे समेकित कर सकता हूं, जो सीधे पास हो जाता है आधार टेम्पलेट? मैं jinja2 टेम्पलेट्स का भी उपयोग कर रहा हूं।

मुझे कुछ और अधिक सरल और रखरखाव के बदले में इतना बोझिल करने से नफरत होगी।

कोई विचार? धन्यवाद।


संपादित

तो मैं अभी भी नहीं मिला है कुछ भी है कि है बिल्कुल मैं के लिए क्या देख रहा हूँ; हालांकि, मैंने कम से कम अंतरिम में कुछ रास्ता बनाने का फैसला किया। इसलिए, मैंने एक कस्टम सजावट की है जो एक दृश्य वापस लौटा() लेता है और उचित डेटा जोड़ता है। उदाहरण के लिए:

def get_base_data(func): 
    def wrapper(request): 
     d = func(request) 
     user_id = request.user.id # used in query 
     contact_group_data = ContactGroups.query.filter(...criteria...).all() 
     d['contact_group_data'] = contact_group_data 
     return d 
    return wrapper 

अब, मैं कम से कम प्रत्येक विधि बहुत संक्षेप में और बस डाल कर सजाने कर सकते हैं:

@view_config(...) 
@get_base_data 
def my_handler(request): 
    pass # rest of code... 

उत्तर

5

इस पिरामिड में सबसे inobvious चीजों में से एक है और मेरे लिए खोजने के लिए कुछ समय लिया भी

आप BeforeRender ईवेंट में वैश्विक टेम्पलेट संदर्भ को संशोधित कर सकते हैं।

http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/hooks.html#using-the-before-render-event

वैकल्पिक रूप से, आप वर्ग आधारित विचारों इस्तेमाल कर सकते हैं, जो get_base_data(), तो वर्ग उदाहरण आपके सभी विचारों को टेम्पलेट संदर्भ में भेजा जाता है है एक आधार दृश्य वर्ग से अपने सभी विचारों के वारिस और फिर आप निकाल सकते {{ view.get_base_data }} के साथ डेटा।

http://ruslanspivak.com/2012/03/02/class-based-views-in-pyramid/

मैं बाद दृष्टिकोण की पुष्टि के रूप में यह है, और अधिक सुंदर उम्मीद के मुताबिक और आसान बुद्धिमान इंजीनियरिंग बनाए रखना है।

+0

यह बहुत अच्छा है, मैं वास्तव में इस पर सहायता की सराहना करता हूं। मैं मानता हूं, वर्ग आधारित विचार दृष्टिकोण अधिक सुरुचिपूर्ण प्रतीत होता है। – JohnZ

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