Jinja2:说“在另一个宏或模板中渲染这个宏”
Posted
技术标签:
【中文标题】Jinja2:说“在另一个宏或模板中渲染这个宏”【英文标题】:Jinja2: saying 'Render this macro inside another macro or template' 【发布时间】:2013-03-25 16:28:49 【问题描述】:我想在一个通用容器宏或模板中呈现许多宏。用伪代码:
宏1
宏2
宏3
容器
在模板中:
"render macro1 inside of Container" e.g. macro1 with Container
我不想每次都通过渲染Container然后里面的宏,我只需要指定,当这个宏被另一个宏包围时
我认为 'call' (http://jinja.pocoo.org/docs/templates/#macros) 是我正在寻找的,但我现在不太明白。任何意见,如果不清楚,我如何澄清这一点。
【问题讨论】:
【参考方案1】:这对我有用:
% macro _enclosure() %
<div id="topenclosure">hello I'm on top</div>
caller()
<div id="bottomenclosure">hello I'm on the bottom</div>
% endmacro %
% macro account_user_profile_macro(i) %
% call _enclosure() %
i.__dict__
% endcall %
% endmacro %
【讨论】:
似乎对我不起作用 :-( ``` % call host(_host) % TypeError: 宏 'host' 被调用时使用了特殊调用者参数的两个值。这很可能是错误。``` github.com/pallets/jinja/issues/678#issuecomment-277043879 我通过将caller()
放入每个宏来解决。【参考方案2】:
来自documentation:
在某些情况下,将一个宏传递给另一个宏会很有用。为此,您可以使用特殊调用块。以下示例显示了一个利用调用功能的宏以及如何使用它:
% 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 %
【讨论】:
以上是关于Jinja2:说“在另一个宏或模板中渲染这个宏”的主要内容,如果未能解决你的问题,请参考以下文章