flask中jinjia2模板引擎使用详解5

18 篇文章 0 订阅
16 篇文章 1 订阅

接上文

可以理解为函数,即把一些常用的模板片段做好封装,以便于重用,减少工作量和维护难度。

宏的定义很简单:

{%macroxxx()%}

##这里写内容

{%endmacro%}

下面引用官方的一个例子进行说明:

{%macro input(name, value='', type='text', size=20) -%}

    <inputtype="{{ type }}"name="{{ name }}"value="{{

        value|e}}"size="{{ size }}">

{%- endmacro%}

在content的block中进行调用

<p>{{ input('username') }}</p>
<p>{{ input('password', type='password') }}</p>

  

运行效果:


导入宏

我们可以把常用的宏放到一个文件中,然后在其它文件中引用,实现模块化的管理。

我们新建一个form.html的文件,放入如下的代码:

{% macro input(name, value='', type='text') -%}
    <input type="{{ type }}" value="{{ value|e }}" name="{{ name }}">
{%- endmacro %}

{%- macro textarea(name, value='', rows=10, cols=40) -%}
    <textarea name="{{ name }}" rows="{{ rows }}" cols="{{ cols
        }}">{{ value|e }}</textarea>
{%- endmacro %}

在list.html中导入forms.html

{% import "forms.html" as forms%}

调用方式

<dl>
    <dt>Username</dt>
    <dd>{{ forms.input('username') }}</dd>
    <dt>Password</dt>
    <dd>{{ forms.input('password', type='password') }}</dd>
</dl>
<p>{{ forms.textarea('comment') }}</p>

运行效果:

还有一种调用方式:

{%from'forms.html'import input as input_field, textarea %}

宏调用

在某些情况下,需要把一个宏传递到另一个宏。为此,可以使用特殊的 call 块。 下面的例子展示了如何让宏利用调用功能:

 

代码:

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

{%
call render_dialog('HelloWorld') %}
    This is a simple dialog rendered byusing a macro and
    a call block.
{%
endcall %}

 

运行效果:

Call块其实是一种特殊的宏,我们可以叫它为匿名宏,就是没有命名的函数,函数当然就可以有参数,下面还是以一个例子来说明一下带参数的call模块的使用方式。
<h1>带参数的宏</h1>
{%
macro dump_users(users) -%}
    <
ul>
        {%-
for user in users %}
            <
li><p>{{ user|e }}</p>{{ caller(user) }}</li>
        {%-
endfor %}
    </
ul>
{%-
endmacro %}

{%
call(user) dump_users(users) %}
    <
dl>
        <
dl>姓名</dl>
        <
dd>{{ user|e }}</dd>

    </
dl>
{%
endcall %}

运行效果:


本文源码地址:链接:https://pan.baidu.com/s/1xYE4ITn6dVE22qgNU097tg 密码:c4ki  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值