接上文

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

宏的定义很简单:

{%macro xxx()%}

##这里写内容

{%endmacro%}

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

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

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

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

{%- endmacro %}

在content的block中进行调用

<>{{ () }}</>
<>{{ (, =) }}</>

运行效果:

导入宏

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

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

{% (, =, =) -%}<{{ }}{{ |}}{{ }}>
{%- %}{%- (, =, =10, =40) -%}<{{ }}{{ }}{{ }}>{{ |}}</>
{%- %}

在list.html中导入forms.html

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

调用方式

<><>Username</><>{{ .() }}</><>Password</><>{{ .(, =) }}</>
</>
<>{{ .() }}</>

运行效果:

还有一种调用方式:

{% 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('Hello World') %}
This is a simple dialog rendered by using 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/1BD6pESSwW8SoRHKe66P8Dw 密码:ur6u

转载于:https://blog.51cto.com/12482328/2083998

flask中jinjia2模板引擎使用详解5相关推荐

  1. flask中jinjia2模板引擎详解3

    接上文 模板继承 Jinji2中的模板继承是jinjia2比较强大的功能之一. 模板继承可以定义一个父级公共的模板,把同一类的模板框架定义出来共享. 这样做一方面可以提取共享代码,减少代码冗余和重复的 ...

  2. freemaker模板引擎使用详解

    目录: 一.freemaker介绍 二.freemaker的使用 正文: 一.freemaker介绍 1.1FreeMarker概述:FreeMarker是一款模板引擎,即一种基于模板和要改变的数据, ...

  3. java模板引擎 jade_Jade模板引擎使用详解

    在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includes) 模 ...

  4. PHP模板引擎Smarty详解

    Smarty是由Monte Ohrt和Andrei Zmievski写出的PHP模板引擎.它不同于其他的模板引擎,比如FastTemplate或者patTemplate,其中主要原因就是Smarty会 ...

  5. php ejs,EJS模板引擎实例详解

    前面的话 nodejs的模板引擎有很多, EJS是比较简单和容易上手的.本文将详细介绍EJS 概述 EJS是一个简单高效的模板语言,通过数据和模板,可以生成HTML标记文本.可以说EJS是一个Java ...

  6. java h5模板引擎_详解SpringBoot+Thymeleaf 基于HTML5的现代模板引擎

    序言: Thymeleaf 是Java服务端的模板引擎,与传统的JSP不同,前者可以使用浏览器直接打开,因为可以忽略掉拓展属性,相当于打开原生页面,给前端人员也带来一定的便利.如果你已经厌倦了JSP+ ...

  7. java模板引擎 jade_模板引擎Jade详解

    有用的符号: | 竖杠后的字符会被原样输出 · 点表示下一级的所有字符都会被原样输出,不再被识别.(就是|的升级版,实现批量) include 表示引用外部文件短杠说明后面跟着的字符只是一段代码(与| ...

  8. vue-cli生成的模板各个文件详解(转)

    vue-cli脚手架中webpack配置基础文件详解 一.前言 原文:https://segmentfault.com/a/1190000014804826 vue-cli是构建vue单页应用的脚手架 ...

  9. ecshop模板smarty foreach详解

    Smarty目录: /libs Smarty的功能类目录 /tempalates 模板文件目录 /templates_c 模板缓存文件目录 /configs 配置文件目录 /cache 缓存文件目录 ...

最新文章

  1. golang 安装一个项目下的所有依赖
  2. 中国万网域名注册量动态:12月上旬净增8424个
  3. Android触摸事件源码分析:Activity-ViewGroup-View
  4. Spring中对于WebApplicationInitializer的理解
  5. python删除所有core文件_python – 从pandas.core.series.Series中删除前导零
  6. 量子计算机打破智子封锁,人类科技会被“智子”锁死?来看量子计算机如何打破技术壁垒...
  7. Map端的聚合操作Combiner
  8. Leetcode之javascript解题(No33-34)
  9. 7-160 找完数 (20 分)
  10. [BZOJ3566][SHOI2014]概率充电器
  11. Oracle之外键(Foreign Key)使用方法具体解释(二)- 级联删除(DELETE CASCADE)
  12. android-Handler
  13. MQ通道搭建以及连通性检查
  14. 如何在html中写json格式数据类型,html中如何美化展示json格式数据
  15. 程序员用什么软件做笔记?
  16. [深度学习工具]·FoolNLTK 中文处理工具包使用教程
  17. 编译g2o提示错误 error: ‘ScalarBinaryOpTraits’ is not a class template
  18. php标签打印机,PHP连接打印机
  19. 【淘宝API开发系列】获得商品评论 API 返回值说明
  20. office2016激活後显示是激活的状态,打开后还是提示激活:“让我们开始”

热门文章

  1. JAVA try...catch...finally中的执行顺序和return语句
  2. Centos(6、7) —— yum源的配置
  3. VS 2017显示“高级保存选项”命令操作方法
  4. Oracle管理表空间和数据文件详解
  5. machine learning(15) --Regularization:Regularized logistic regression
  6. 有关 Session 操作的几个误区
  7. 图像平滑处理(归一化块滤波、高斯滤波、中值滤波、双边滤波)
  8. Joint Bilateral Filtering 双边滤波
  9. 纯CSS实现立方体旋转
  10. 「镁客·请讲」摩簦伞易新宇:对共享雨伞的不同理解,让他们玩法也和他人不同...