2012-08-09 16 views
5

मेरे पास कुछ मैक्रोज़ परिभाषित हैं जिन्हें कई टेम्पलेट्स से बुलाया जाता है।एक दृश्य से Jinja2 मैक्रो प्रस्तुत करने के लिए कैसे?

उदाहरण के लिए, उत्पाद पृष्ठ में एक समीक्षा अनुभाग है जो प्रत्येक समीक्षा को मुद्रित करने के लिए 'helpers/review.jinja2' में परिभाषित मैक्रोज का उपयोग करता है। 'helpers/review.jinja2' फ़ाइल इस दो मैक्रो है:

{% macro render_review(request,review) -%} 
{% macro render_review_comment(request,comment) -%} 

जब कोई एक नई समीक्षा सबमिट करता है, ajax के माध्यम से, मैं आदेश की समीक्षा अनुभाग के लिए सामग्री संलग्न करने के लिए में प्रदान की गई समीक्षा लौटना चाहते।

अभी, मैं एक मध्यवर्ती टेम्पलेट 'review/review.jinja2' है कि इस तरह दिखता है:

{% import 'helpers/review.jinja2' as review_helper %} 
{{ review_helper.render_review(request,review) }} 

इस टेम्पलेट देखने से प्रदान की गई है:

@view_config(route_name='review.add_review', renderer='review/review.jinja2') 
def add_review(request): 
    return dict(review=my_new_review) 

लेकिन मुझे आशा है कि वहाँ क्या करने के लिए एक बेहतर तरीका है इस। तो, क्या एक टेम्पलेट में परिभाषित मैक्रो प्रस्तुत करना संभव है?

धन्यवाद

+0

मैं सिर्फ Jinja2 के घ के माध्यम से एक त्वरित खोज किया ओसीएस और ऐसा नहीं लगता है कि ऐसा करने का कोई तरीका है। –

उत्तर

3

समाधान वास्तव में आर्मिन की परियोजनाओं में से एक में पाया जा सकता - बोतल एक get_template_attribute विधि (विधि के स्रोत के लिए here देखें) लागू करता है। यह हमें Jinja2 के Template वर्ग पर, विशेष रूप से Template वर्ग 'module attribute पर इंगित करता है।

मुझे नहीं पता कि जिन्जा 2 के लिए पिरामिड का डिफ़ॉल्ट रेंडरर आपके लिए उस कार्यक्षमता का खुलासा करता है, लेकिन कस्टम रेंडरर बनाना और पंजीकरण करना संभव है यदि डिफ़ॉल्ट व्यक्ति आपको ऐसा कुछ करने की अनुमति नहीं देता है (पूरी तरह से सैद्धांतिक):

@view_config(route_name='review.add_review', 
       renderer='helpers/review.jinja2:render_review') 
def add_review(request): 
    return dict(review=my_new_review) 
+0

यह सादा पिरामिड के साथ काम नहीं किया। यह जटिल लग रहा है, लेकिन मैं इसे एक और बार कोशिश करूंगा: डी –

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