2015-06-22 8 views
1

В процессе понимания Mako (механизм шаблонов для Python) я начал играть с конструкциями defs.Mako: def composition (at render time) не оценивается должным образом

Одна вещь, которую я попытался сделать, заключается в том, чтобы выпустить общий запрос «if» (скажем, один из JavaScript) из вызовов def. Вот текст:

<%def name="if_statement(x)">if (${x})</%def> 
<%def name="sample_condition()">3 == 3</%def> 

${if_statement(sample_condition())} 

Выход не ожидается if(3 == 3), но 3 == 3if(), так же, как аргумент if_statement «s оценивали перед любым другим содержанием опр и оказываемых на фронте.

Является ли это ожидаемым поведением? И если да, то почему? Кроме того, как я мог достичь того, что я пытался сделать?

ответ

0

Да, это желаемое поведение из-за buffering, но вы можете легко заставить его работать так, как вы хотели, используя встроенную функцию capture(). Вот рабочий пример:

<%def name="if_statement(x)">if (${x})</%def> 
<%def name="sample_condition()">3 == 3</%def> 

${if_statement(capture(sample_condition))} 

if (3 == 3) Результат.