Flask:Jinjia模板

Jinja2是Python下一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能。
一、变量
1.1 手动传入的变量:
- 基本类型:{{ var }}
- 字典类型:{{ mydic [ 'key' ] }} 或 {{ mydic.key }}
- 列表类型:{{ mylist [ myindex ] }}
- 对象类型:{{ myobj. somemethod() }}
1.2 全局变量:
可用的全局变量:config、request、session、g、通过上下文管理器注册到全局变量...
1.3 过滤器:
| 过滤器名 | 说明 |
|---|---|
safe |
渲染值时不转义 |
capitalize |
把值的首字母转换成大写,其他字母转换成小写 |
lower |
把值转换成小写形式 |
upper |
把值转换成大写形式 |
title |
把值中每个单词的首字母都转换成大写 |
trim |
把值的首尾空格删掉 |
striptags |
渲染之前把值中所有的 HTML 标签都删掉 |
使用语法:{{ var|safe }}
过滤器可以嵌套使用
可以自定义过滤器
二、控制结构
2.1 条件判断
{% if user="张三" %}
Hello, {{ user }}!
{% elif user="李四"%}
Hello, 李四!
{% else %}
Hello, Stranger!
{% endif %}
判断条件兼容python语法的条件判断,另外还有Jinjia模板内置判断条件:
| 判断条件 | 说明 | 实例 |
|---|---|---|
| defined/undefined | 环境中是否有此变量的定义 | if var is defined |
| none | 变量是否为none | if var is none |
| number/string | 数字、字符判断 | ... |
| even/odd | 奇偶判断 | ... |
| upper/lower | 大小写判断 | ... |
2.2 循环
Jinjia模板的循环语法如下,但原生不支持break和continue语句,可通过扩展实现app.jinjia_env.add_extension('jinjia2.ext.loopcontrols')
<ul>
{% for comment in comments %}
<li>{{ comment }}</li>
{% else %}
<li>如果循环体为空则显示这里(可选)</li>
{% endfor %}
</ul>
Jinjia模板中循环体内的内置函数:
| 变量 | 描述 |
|---|---|
| loop.index | 当前循环迭代的次数(从1开始) |
| loop.index0 | 当前循环迭代的次数(从0开始) |
| loop.revindex | 到循环结束需要迭代的次数(从1开始) |
| loop.revindex0 | 到循环结束需要迭代的次数(从0开始) |
| loop.first | 若是第一次迭代,则返回True |
| loop.last | 若是最后一次迭代,则返回True |
| loop.length | 当前循环的总长度 |
| loop.cycle(a,b,c) | 循环的从指定序列中取值 |
三、模板重用
3.1 模板宏
定义单独的宏文件(macro.html)
{% macro render_comment(comment) %}
<li>{{ comment }}</li>
{% endmacro %}
导入使用:
{% import 'macros.html' as macros %}
<ul>
{% for comment in comments %}
{{ macros.render_comment(comment) }}
{% endfor %}
</ul>
3.2 模板包含
需要在多处重复使用的模板代码片段可以写入单独的文件,再引入所有模板中,以避免重复。
{% include 'common.html' %}
{% include 'common.html' ignore missing %} #如果模板不存在,不会报错
{% include 'common.html' with/without context %} #是否携带当前页面的上下文
3.3 模板继承
Jinja2 使用 block 和 endblock 指令在基模板中定义内容区块。
- 语法:{% extends "base.html" %}
- 同名区块直接覆盖
- 同名区块可使用super()扩展
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style>
</style>
{% endblock %}
{% block body %}
<h1>Hello, World!</h1>
{% endblock %}
四、模板中的全局函数
| 函数 | 说明 |
|---|---|
| url_for() | 构建URL |
| get_flashed_messages() | 获取闪现消息 |
| range() | 同python中的range函数 |
| dict() | 同python中的dict函数 |
| cycler(* items) | 常用于CSS类名的循环 |
五、其他
5.1 模板注释:
模板注释的语法:{{# ... #}},模板注释不会出现在HTML文档中,HTML注释会。
5.2 除HTML文档中多余的空白:
在模板标签的开始或结束添加一个 -
{%- for comment in comments %}
<li>{{ comment }}</li>
{% endfor -%}
5.3 使用变量:
设置变量:{{% set a,b=(1,2) %}}
使用with实现变量的块级作用域:
{{% with %}}
{{% set a,b=(1,2) %}}
...只在区块内有效
{{% endwith %}}
Flask:Jinjia模板的更多相关文章
- Flask网页模板的入门
#网页模板需要导入render_template from flask import Flask,render_template 方法一: #使用render_template模块来渲染模板文件 ...
- flask框架--模板
今天又是一个精彩又无聊的一天,不过随着知识的缓慢的增加我的内心也充满了干劲,虽然前进的有些缓慢 但我不会这么容易放弃的,一定要相信自己,不要灰心 好了 ~ 不说废话了 , 我自己听的都有些受不了了 . ...
- Flask:Flask的模板系统和静态文件
1.Flask模板系统 Django框架有自己独立的模板系统,而Flask是没有的,Flask默认采用jinjia2模板系统,jinjia2是仿写Django模板系统的一个第三方模块,但性能上要比Dj ...
- Flask 的模板渲染
Flask 的模板渲染 渲染模板语言和django很像,都是用{{}},{%%} 注意点: 1 flask给模板传值,render_template("index.htm",use ...
- Flask入门之Jinjia模板的一些语法
1. 变量表示 {{ argv }} 2. 赋值操作 {% set links = [ ('home',url_for('.home')), ('service',url_for('.service' ...
- 2.Flask jinjia2模板
1.1.模板传参 (1)主程序 from flask import Flask,render_template app = Flask(__name__) @app.route('/') def he ...
- 第四篇flask中模板语言 jinja2
Flask中默认的模板语言是Jinja2 首先我们要在后端定义几个字符串,用于传递到前端 STUDENT = {, 'gender': '中'}, STUDENT_LIST = [ {, 'gende ...
- 二.Flask 学习模板
Flask 为你配置 Jinja2 模板引擎.使用 render_template() 方法可以渲染模板,只需提供模板名称和需要作为参数传递给模板的变量就可简单执行. 至于模板渲染? 简单来说,就是将 ...
- Python——Flask框架——模板
一.渲染模板 render_template 函数把Jinja2模板引擎集成到程序中 二.Jinja2变量过滤器 过滤器名 说明 safe 渲染值是不转义 capitalize 把值得首字母转换成大写 ...
随机推荐
- F - Cheapest Palindrome
有一个长度为m的字符串,由n种小写字母组成.对应的n种字母在这个字符串加上或者减去都有相应的费用,现在要将这个字符串变成回文串,问最低消费是多少? Keeping track of all the c ...
- python实现通过指定浏览器免费观看vip视频
程序是先通过一个解析视频的网站,然后我们提取其接口,然后实现观看vip视频的目的 所以说免费观看视频python程序很容易,但是下载视频就有些许麻烦了,下载视频请见我另一篇博客:python+fidd ...
- java——字符串常量池、字符串函数以及static关键字的使用、数组的一些操作函数、math函数
字符串常量池: 字符串比较函数: 字符串常用方法: 字符串截取函数: 字符串截取函数: static关键字使用: 要调用类中的static类型的变量的时候,可以用"类名.变量名&quo ...
- Long Long Message POJ - 2774 后缀数组
The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him ...
- ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015) G. It is all about wisdom (二分,单源最短路)
题意:有\(n\)个点,\(m\)条边,只有当你的智力值大于这条边的\(w\)才能走,问在花费不超过\(k\)的情况下,从\(1\)走到\(n\)的所需的最小智力值. 题解:这题比赛为什么没想出来呢? ...
- CF1478-B. Nezzar and Lucky Number
CF1478-B. Nezzar and Lucky Number 题意: 题目给出一个数字\(d(1\leq d \leq 9)\)代表某个人最喜欢的数字. 题目定义了幸运数字,它的含义为:若一个数 ...
- k8s-0-集群
Docker回顾 docker容器封装应用程序好处 内核在3.8以上,才能完整使用docker隔离功能(所有centos6不推荐用) Docker容器化封装应用程序缺点 容器编排工具有哪些 一: K8 ...
- Kubernets二进制安装(7)之部署主控节点服务--apiserver简介
API Server简介 Kubernetes API Server提供了K8S各类资源对象(如:pod.RC.Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和 ...
- java-GUI编程学习总结
狂神说java-GUI编程学习总结 1.简介 2.AWT 2.1.实现如图1-2 (1)面向过程写法 (2)内部类写法 (3)完全改造成面向对象 3.Swing 3.1.鼠标花点 3.2.弹窗 3.3 ...
- haut-1280 诡异的迷宫
1280: 诡异的迷宫 时间限制: 2 秒 内存限制: 128 MB提交: 174 解决: 27提交 状态 题目描述 Simple最近刷题(打游戏)刷多了,一觉醒来发现自己到了一个迷宫里,怎么也出 ...