1.变量

2.1节中的模板文件user.html的{{ name }}就是一个变量,形式如一种占位符,而真实的数据只有在程序临时的上下文中获取。

Jinja2能识别所有类型的变量,甚至一些复杂的类型,例如列表、字典和对象。示例如下:{{ mylist[1] }},{{ mydict[‘name’] }},{{ myobj.to_do() }}。
同时,Jinja2支持使用过滤器修改变量,过滤器添加在变量后面,中间用竖线分割,例如将变量name的首字母大写:
Hello, {{ name|capitalize }}

Jinja2提供的部分常用过滤器有:

过滤器 说明
capitalize 把值的首字母变成大写,其他字母变成小写
lower 把字母全部变成小写
upper 把字母全部变成大写
title 把值中每个单词的首字母都变成大写
trim 把值的首尾空格去掉
striptags 渲染之前把值中所有的HTML标签都删掉
safe 渲染时不转义

safe 过滤器值得特别说明一下。默认情况下,出于安全考虑,Jinja2 会转义所有变量。例如,如果一个变量的值为 ‘<h1>Hello, everyone.<h1>’,Jinja2 会将其渲染成 ‘&lt;h1&gt;Hello, everyone.&lt;/h1&gt;’ ,浏览器能显示这个 h1 元素,但不会进行解释。很多情况下需要显示变量中存储的 HTML 代码,这时就可使用 safe 过滤器。

2.控制结构

JInja2提供了多种控制结构,用来改变模板的渲染过程。
下面例如展示:条件控制

{% if user %}Hello, {{ user }}.
{% else %}Hello, stranger.
{% endif %}

下面例如展示:渲染一组元素

<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:

{% 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标签定义的元素可在衍生模板中修改。在base.html中,定义了head、title和body的块,然后衍生模板index.html继承基模板base.html:

{% extends "base.html" %}{% block title %}Index Page{% endblock %}
{% block head %}{{ super() }}<style></style>
{% endblock %}{% block body %}<h1>Hello, everyone.</h1>
{% endblock %}

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

【Flask学习】2.2模板之设计相关推荐

  1. Flask框架基础Jinja2模板

    Flask框架基础Jinja2模板-- 潘登同学的flask学习笔记 文章目录 Flask框架基础Jinja2模板-- 潘登同学的flask学习笔记 return 模板 Template 模板的使用 ...

  2. 19HTML5期末大作业:动画漫影视网站设计——动画漫展学习资料电影模板(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 课程设计网页规划与设计 计算机毕设网页设计源

    HTML5期末大作业:动画漫影视网站设计--动画漫展学习资料电影模板(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常 ...

  3. HTML期末大作业 学生DW静态网页设计 动画漫展学习资料电影模板(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源

    HTML5期末大作业`动画漫影视网站设计--动画漫展学习资料电影模板(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 wHTML期末大作业 学生DW静态网页设计 html大作 ...

  4. Flask学习之旅——2.1 模板简介及基础使用

    Flask学习之旅--2.1 模板简介及基础使用 前言 本文为<知了传课--模板简介>的学习笔记. 原文地址:第一节:模板简介 - Python框架Flask基础教程 - 知了传课 (zl ...

  5. Flask学习之旅——2.6 模板继承

    Flask学习之旅--2.6 模板继承 前言 本文为<知了传课--模版继承>的学习笔记. 原文地址:第八节:模板继承 - Python框架Flask基础教程 - 知了传课 (zlkt.ne ...

  6. Flask学习之旅——2.2 模板过滤器

    Flask学习之旅--2.2 模板过滤器 前言 本文为<知了传课--Jinja2模版过滤器>的学习笔记. 原文地址:第三节:模板过滤器 - Python框架Flask基础教程 - 知了传课 ...

  7. Flask入门学习---初步了解模板

    1.为什么需要模板引擎(template engine)? 在上面的例子中,我们视图函数向客户端返回一行HTML代码.当有大量HTML代码的时候,我们应该将它们都存储在一个文件里面,从而让控制器和用户 ...

  8. Flask的大型网站模板

    Flask的大型网站模板 第一次学习使用Flask的时候是为了赶鸭子上架,那时候python和flask的优势就出来了,没有任何网站开发经验,两天部署出一个简单的微信公众平台,说到底这都是开源的力量, ...

  9. 千锋Flask学习笔记

    千锋Flask学习笔记 文章目录 千锋Flask学习笔记 写在前面 1. Flask介绍 2. Views 3. Request 4. Response 5. 会话技术 6. 模型和模板 7. 数据传 ...

  10. C/C++学习之路: 模板和异常

    C/C++学习之路: 模板和异常 目录 模板 类型转换 异常 1. 模板 1. 模板概述 c++提供了函数模板(function template),函数模板实际上是建立一个通用函数,其函数类型和形参 ...

最新文章

  1. 统计s=hello alex alex hello haiyan cc haiyan com中每个单词的个数
  2. 目标立体检测 红外图像_一种有效的红外小目标检测方法
  3. 如何用python制作动态二维码,提升表白成功率?
  4. Mac电脑如何显示隐藏文件
  5. Javascript 面向对象编程初探(一)--- 封装
  6. 计算机视觉与深度学习 | 复杂环境下的视觉同时定位与地图构建(SLAM)
  7. oracle 600 侯,oracle在导入数据时报600错误的解决方法
  8. #6278. 数列分块入门 2
  9. Redhat7安装centos7的yum
  10. Python之NLP(转)
  11. python怎么输出文件_python如何输出文件内容
  12. 51单片机LCD1602程序
  13. 我连鼠标光标都是爱你的形状——MATLAB自定义光标及png转化为光标数组
  14. Windows PC HYSPLIT Install
  15. 程序设计-股票最大收益问题(Java)
  16. torch学习 (二十九):周杰伦歌词数据集测试循环神经网络
  17. 惊喜! UE4 + ftrack开源了!
  18. MIT molecular Biology 笔记11 位点特异性重组 和 DNA转座
  19. 青蛙过河 猴子爬山 兔子繁殖 开宝箱2 找气球 指针函数 铺地砖
  20. CSS开发中所有基本属性的使用技巧

热门文章

  1. 学3D角色建模,有这本雕塑解剖书事半功倍
  2. OSChina 周二乱弹 ——巴叔别怕,我来保护你。
  3. VS2019使用QT框架搭建记录
  4. 柱状图和折线图_SCI论文写作中折线图和柱状图的区别
  5. Python性别识别
  6. MYSQL自定义函数 的创建 create、查看函数、修改/更新函数删除函数 以及具体实例
  7. 你具备抽离与封装的思想吗?
  8. Flutter4-抽离组件,自定义组件
  9. 什么是ARM 的big.LITTLE
  10. iOS16.1开发者预览版Beta3发布:优化壁纸功能