linux使用jinja2模板_flask中jinjia2模板引擎使用详解5

接上文

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

宏的定义很简单:

{%macro xxx()%} ##这里写内容 {%endmacro%}

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

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

在content的block中进行调用

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

运行效果:

ef69b9cb4e88c4ab52ac2e7955cf26c2.png

导入宏

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

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

{% macro input(name, value='', type='text') -%} {%- endmacro %} {%- macro textarea(name, value='', rows=10, cols=40) -%} {{ value|e }} {%- endmacro %}

在list.html中导入forms.html

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

调用方式:

Username
{{ forms.input('username') }}
Password
{{ forms.input('password', type='password') }}
>{{ forms.textarea('comment') }}>

运行效果:

80b449d9e7d66af9261fb7fdd4435c25.png

还有一种调用方式:

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

宏调用

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

67e1c5fc4877322542a3782435fd0730.png

代码:

调用示例
{% macro render_dialog(title, class='dialog') -%}
{{ title }}
{{ caller() }} > > {%- endmacro %} {% call render_dialog('Hello World') %} This is a simple dialog rendered by using a macro and a call block. {% endcall %}

运行效果:

Call块其实是一种特殊的宏,我们可以叫它为匿名宏,就是没有命名的函数,函数当然就可以有参数,下面还是以一个例子来说明一下带参数的call模块的使用方式。

带参数的宏
{% macro dump_users(users) -%}
  • {%- for user in users %}
  • >{{ user|e }}>{{ caller(user) }} {%- endfor %}
{%- endmacro %} {% call(user) dump_users(users) %} {{ user|e }} {% endcall %}

运行效果:

f90b6a0084bdd1cdf9a8f8a3ccdd5fcb.png

本文源码:链接:https://pan.baidu.com/s/1HPIrK0Qdz4EAEKnTwPtGdQ 密码:ouic

原文出处:zhihu -> https://zhuanlan.zhihu.com/p/34326472

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值