2015-07-31 7 views
8

के साथ सभी Jinja2 टेम्पलेट्स को पास वैरिएबल पास करें मेरे पास मेरे वेबैप की नेविगेशन सिस्टम में एक टेबल है जो प्रत्येक पृष्ठ को प्रस्तुत किए जाने पर अद्यतित जानकारी के साथ पॉप्युलेट की जाएगी। मैं प्रत्येक view में निम्न कोड डालने से कैसे बच सकता हूं?फ्लास्क

def myview(): 
    mydict = code_to_generate_dict() 
    return render_template('main_page.html',mydict=mydict) 

mydict तालिका को पॉप्युलेट करने के लिए उपयोग किया जाता है। तालिका प्रत्येक पृष्ठ पर दिखाई देगी

उत्तर

15

आप Flask's Context Processors उपयोग कर सकते हैं अपने जिंजा टेम्पलेट्स

यहाँ में वैश्विक सुई एक उदाहरण है:

@app.context_processor 
def inject_dict_for_all_templates(): 
    return dict(mydict=code_to_generate_dict()) 

एक टेम्पलेट के संदर्भ में स्वचालित रूप से नए चर इंजेक्षन करने के लिए, संदर्भ फ्लास्क में प्रोसेसर मौजूद हैं। संदर्भ प्रोसेसर टेम्पलेट से पहले चलाए जाते हैं और टेम्पलेट संदर्भ में नए मानों को इंजेक्ट करने की क्षमता रखते हैं। एक संदर्भ प्रोसेसर एक ऐसा फ़ंक्शन है जो शब्दकोश देता है। कुंजी और इस शब्दकोश के मूल्यों फिर टेम्पलेट संदर्भ के साथ विलय कर रहे हैं, अनुप्रयोग में सभी टेम्पलेट्स के लिए:

+0

तो यह दूसरों के लिए भ्रमित नहीं कर रहा है के सभी को संशोधित, हो सकता है उल्लेख करें कि फ्लास्क वापस लौटने के लिए 'dict' की तलाश कर रहा है, चाहे मेरा वैरिएबल इंजेक्शन दिया जाए, 'स्ट्रिंग', 'सूची', या किसी अन्य डेटाटाइप ('dict' सहित) –

1

अपनी खुद की रेंडर विधि लिखें, कोड को दोहराने से खुद को रखें। फिर जब भी आपको टेम्पलेट प्रस्तुत करने की आवश्यकता हो, इसे कॉल करें।

def render_with_dict(template): 
    mydict = code_to_generate_dict() 
    return render_template(template, mydict=mydict) 

def myview(): 
    return render_with_dict('main_page.html') 
+0

जोश के जवाब की जरूरत नहीं थी कि मैं अपने मौजूदा टेम्पलेट –