Подтвердить что ты не робот

Как избежать повторной спецификации фильтра в mako% def?

Я обнаружил, что повторяю один и тот же атрибут фильтра по всем% def в моем mako-коде:

<%def name="mydef1(a,b)" filter="trim">
# something something something
</%def>

... 

<%def name="mydef2(b)" filter="trim">
# something something something
</%def>

Есть ли способ указать набор фильтров по умолчанию для всех% def и избежать повторяющегося 'filter = "trim" в моем коде?

Я заметил, что есть опция указать фильтры по умолчанию для фильтров выражений, но я не смог найти что-то подобное для% def.

4b9b3361

Ответ 1

Есть несколько способов обхода, которые вы можете использовать:

  • Вы можете использовать аргумент default_filters, если вы в порядке импортировать defs программно или загружать их из файл.
  • Вы можете вложить defs в родительский def и применить (у меня нет mako на моей текущей машине, поэтому я не могу это переписать, но я на 99% уверен, что это работает, пожалуйста, позвоните мне, если я ошибаюсь.)

    <%def name="filterdefs()" filter="trim">
    
        <%def name="mydef1(a,b)">
        # something something something
        </%def>
    
        <%def name="mydef2(b)">
        # something something something
        </%def>
    
    </def>
    
  • Наконец, вы можете использовать buffer_filters, как это было предложено в Комментарии. Однако вместо добавления buffered="True" вы можете просто вызовите def с capture(myDef) вместо myDef()