2011-02-15 21 views
9

समझ में नहीं आता है, मैं अवधारणा को समझता हूं, लेकिन मुझे वाक्यविन्यास नहीं समझा जाता है।मुझे Jinja2 कॉल ब्लॉक

मैं example अपनी साइट

{% macro render_dialog(title, class='dialog') -%} 
<div class="{{ class }}"> 
    <h2>{{ title }}</h2> 
    <div class="contents"> 
     {{ caller() }} 
    </div> 
</div> 
{%- endmacro %} 

{% call render_dialog('Hello World') %} 
    This is a simple dialog rendered by using a macro and 
    a call block. 
{% endcall %} 

पर इस्तेमाल किया क्या उत्पादन किया जाएगा का उपयोग करने के लिए जा रहा हूँ?

उप-प्रश्न (क्योंकि मैं हेला इस बात पर उलझन में हूं कि यह कैसे काम करता है): क्या आपको प्रति मैक्रो केवल 1 कॉलर रखने की अनुमति है? जब यह caller() तक पहुँचने यह call ब्लॉक की सामग्री से गुजरता है,

<div class="dialog"> 
    <h2>Hello World</h2> 
    <div class="contents"> 

    This is a simple dialog rendered by using a macro and 
    a call block. 

    </div> 
</div> 

तो जब हम render_dialog फोन हम शीर्षक के रूप में 'नमस्ते विश्व' पारित:

उत्तर

10

यह उत्पादन होता है।

+0

कूल। खैर, यह एक मैक्रो को किसी अन्य मैक्रो के अंदर कॉल करने से अलग क्यों बनाता है? –

+0

आप एक पारंपरिक भाषा में एक समारोह के रूप में एक मैक्रो के बारे में सोच सकते हैं। कॉल ब्लॉक सिर्फ उस समारोह का एक आमंत्रण है। – Marii

+1

मैंने पाया कि नेस्टेड मैक्रो में एक नेस्टेड मैक्रो चलने वाले 'कॉलर() 'के साथ एक त्रुटि हुई, क्योंकि इसमें कोई कॉलर डेटा पास नहीं हुआ था। जो मैं वास्तव में चाहता था वह डेटा माता-पिता मैक्रो को पास किया गया था। मैं बाहरी मैक्रो में, {{% सेट सामग्री = कॉलर()%} 'और फिर {{{content}} 'का उपयोग करके आंतरिक मैक्रो में इसे प्राप्त करने में सक्षम था। – tremby