如何在Jinja2中扩展宏?

时间:2020-09-19 10:47:59

标签: macros jinja2

对于以下几乎没有什么不同的代码,我有一些宏用于定义不同种类的按钮

{# normal button #}
{% macro btn() %}
<a 
class="btn waves-effect waves-light" 
role="button"
>
{{kwargs.get('text')}}
</a>
{% endmacro %}

{# rounded button #}
{% macro btn_round() %}
<a 
class="btn waves-effect waves-light btn-rounded" 
role="button"
>
{{kwargs.get('text')}}
</a>
{% endmacro %}

{# outline button #}
{% macro btn_outline() %}
<a 
class="btn waves-effect waves-light btn-outline-primary" 
role="button"
>
{{kwargs.get('text')}}
</a>
{% endmacro %}

{# outline rounded button #}
{% macro btn_outline_round() %}
<a 
class="btn waves-effect waves-light btn-rounded btn-outline-primary" 
role="button"
>
{{kwargs.get('text')}}
</a>
{% endmacro %}

从一个宏到另一个宏,它们几乎相同,只是一个类稍有不同,例如。 btn()btn_round()。好像我在重复自己很多次。

因此,我正在寻找如何将一个宏扩展到另一个宏。我期望这样的事情

{# normal button #}
{% macro btn() %}
<a 
class="btn waves-effect waves-light" 
role="button"
>
{{kwargs.get('text')}}
</a>
{% endmacro %}

{# rounded button #}
{% macro btn_round() %}

extend macro btn() add class btn-rounded

{% endmacro %}

{# outline rounded button #}
{% macro btn-outline-round() %}

 extend macro btn_round add class btn-outline-secondary

{% endmacro %}

我不太确定这是否可行,但我希望我的代码缩短并进行维护,这是“ DRY”原则。谢谢

0 个答案:

没有答案