Jinja2 提供了多种控制结构,可用来改变模板的渲染流程。本节使用简单的例子介绍其中

最有用的控制结构。

下面这个例子展示了如何在模板中使用条件控制语句:

{% if user %}

Hello, {{ user }}!

{% else %}

Hello, Stranger!

{% endif %}

另一种常见需求是在模板中渲染一组元素。下例展示了如何使用 for 循环实现这一需求:

<ul>

{% for comment in comments %}

<li>{{ comment }}</li>

{% endfor %}

</ul>

Jinja2 还支持宏。宏类似于 Python 代码中的函数。例如:

{% macro render_comment(comment) %}

<li>{{ comment }}</li>

{% endmacro %}

<ul>

{% for comment in comments %}

{{ render_comment(comment) }}

{% endfor %}

</ul>

为了重复使用宏,我们可以将其保存在单独的文件中,然后在需要使用的模板中导入:

{% import 'macros.html' as macros %}

<ul>

{% for comment in comments %}

{{ macros.render_comment(comment) }}

{% endfor %}

</ul>

需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复:

{% include 'common.html' %}

另一种重复使用代码的强大方式是模板继承,它类似于 Python 代码中的类继承。首先,创建一个名为 base.html 的基模板:

<html>

<head>

{% block head %}

<title>{% block title %}{% endblock %} - My Application</title>

{% endblock %}

</head>

<body>

{% block body %}

{% endblock %}

</body>

</html>

block 标签定义的元素可在衍生模板中修改。在本例中,我们定义了名为 head、title 和body 的块。注意,title 包含在 head 中。下面这个示例是基模板的衍生模板:

{% extends "base.html" %}

{% block title %}Index{% endblock %}

{% block head %}

{{ super() }}

<style>

</style>

{% endblock %}

{% block body %}

<h1>Hello, World!</h1>

{% endblock %}

extends 指令声明这个模板衍生自 base.html。在 extends 指令之后,基模板中的 3 个块被重新定义,模板引擎会将其插入适当的位置。注意新定义的 head 块,在基模板中其内容不是空的,所以使用 super() 获取原来的内容。

转载于:https://www.cnblogs.com/sanduzxcvbnm/p/6641164.html

3.1.3、控制结构相关推荐

  1. python控制结构实训_《python 从入门到精通》§5 控制结构

    §5控制结构 2009-8-17 磁针石:xurongzhong#gmail.com §5.1关于print和import更多的东东 打印多个值: >>> print 'Age:', ...

  2. Python控制结构总结

    -程序的控制结构共三种 顺序结构:程序按照线性顺序逐渐执行 分支结构:程序根据条件有选择的向程序运行方向执行 循环结构:程序根据一定条件在运行之后返回执行 一.分支结构 单分支结构 if <条件 ...

  3. 就是个控制结构,Scala 能有什么新花样呢?

    作者 | luanhz 来源 | 小数志 导读 编程语言中最为基础的一个概念是控制结构,几乎任何代码都无时无刻不涉及到,其实也就无外乎3种:顺序.分支和循环.本文就来介绍Scala中控制结构,主要是分 ...

  4. R语言笔记5:控制结构

    R语言基础系列前情提要: 1数据类型(向量.数组.矩阵. 列表和数据框) 2读写数据所需的主要函数.与外部环境交互 3数据筛选--提取对象的子集 4:向量.矩阵的数学运算 Control Struct ...

  5. (6)javascript的程序控制结构及语句-----(1)条件判断

    程序控制结构及语句 编程就是将现实应用,转换为程序能够读得懂的语法语句.Javascript编程中对程序流程控制主要是通过条件判断语句.循环控制语句及continue.break来完成的,其中条件判断 ...

  6. Java语言的循环控制结构

    Java语言的循环控制结构 循环控制结构:是在一定条件下,反复执行某段程序的流程结构,被反复执行的程序称为循环体.循环控制结构是程序中非常重要和基本的一种结构,它是由循环语句来实现的. Java 的循 ...

  7. c语言是非结构化程序设计语言,第章_结构化程序设计基础和C语言的控制结构(fb).ppt...

    第章_结构化程序设计基础和C语言的控制结构(fb).ppt 2.4.2 continue语句 例2-24 编程序实现功能:检测从键盘上输入的以换行符结束的字符流,统计非字母字符的个数. 分析:通过循环 ...

  8. (008) java后台开发之java程序中的控制结构

    转自:https://course.tianmaying.com/java-basic+control-flow# 博客应用综合实例 接下来我们来设计一下博客应用,让它可以管理博客. 用户可以输入以下 ...

  9. 循环控制结构程序05 - 零基础入门学习C语言20

    第五章:循环控制结构程序05 让编程改变世界 Change the world by program break和continue语句 break语句 break语句可以用来从循环体内跳出循环体,即提 ...

  10. python控制结构是_Python之控制结构(if、while、for)

    控制结构就是指顺序结构.分支结构.循环结构. 一.顺序结构 这是一种最简单的程序结构,程序按语句的书写次序自上而下顺序执行. 例如:给出圆的半径,求圆的周长和面积. 源程序: >>> ...

最新文章

  1. AI芯片:从历史看未来
  2. Ubuntu 上安装rust
  3. 为什么(#39;b#39;+#39;a#39;+ +#39;a#39;+#39;a#39;)。toLowerCase()#39;banana#39;的结果?
  4. 成功解决TypeError: read_excel() got an unexpected keyword argument ‘parse_cols or ‘sheetname‘
  5. pycharm matplotlib.pyplot.figure().add_subplot()绘制三维图时报错:ValueError: Unknown projection 3d(bug)
  6. 大四生活总结20101015
  7. Canvas 渐变特效
  8. linux重定向文件被修改后,Linux服务器修改.htaccess文件实现301重定向
  9. 面向对象程序设计要考虑的7个原则
  10. Vmware和Citrix各自发展史
  11. 《SEO的艺术(原书第2版)》——3.11 为意识形态影响力开展SEO
  12. 后端根据查询条件生成excel文件返回给前端,vue进行下载
  13. 流畅的python 数据模型
  14. 终于升级?89年的Linux内核C语言“跟上时代”转成现代C
  15. 一线大厂都在跑的微服务,真有这么香吗?
  16. 【病毒分析】——熊猫烧香 专杀工具C源码
  17. 挑战程序设计竞赛:三角形
  18. weblogic部署项目后内存溢出
  19. unity c#斗地主算法计算牌型
  20. Python2—0704笔记

热门文章

  1. 快速线性筛法求素数一般筛法求素数代码
  2. python 自动执行 apdl_在高效的mann中从Python运行ANSYS Mechanical APDL
  3. python递归实例_Python函数递归(带实例演示)
  4. 【PAT】A-1076:Forwards on Weibo(有向图的BFS遍历)
  5. windows与linux线程,Linux和Windows两种风格的操作系统,创建线程的方式有何不同?...
  6. 容器技术Docker K8s 4 容器编排技术基础-Kubernetes
  7. 极客大学架构师训练营 加密技术 高可用系统的度量 高可用系统的架构 高可用系统的运维 第22课 听课总结
  8. io vivado 怎么查看ps_一次诡异的磁盘IO使用率高排查
  9. 多头注意力比单头好在哪?
  10. 3.1 广义线性模型 And XGBoost