Python Flask Jinja2模板引擎
模板
简介
模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请
求的上下文中才能知道。
渲染
使用真实值替换变量,再返回最终得到的响应字符串,这一过程
称为渲染。为了渲染模板,Flask 使用了一个名为 Jinja2 的强大模板引擎。
以下列代码为例:
from flask import Flask, render_template
# ...
@app.route('/')
def index():
return render_template('index.html')
@app.route('/user/<name>')
def user(name):
return render_template('user.html', name=name)
render_template函数的第一个参数是模板的文件名。随后的参数都是键值对,表示模板中变量对应的真实值。
变量
<h1>Hello, {{ name }}!</h1>
上面html中的name即为变量,它是一种特殊的占位符,告诉模板引擎这个位置的值从渲染模板时使用的数据中获取。
控制结构
Jinja2 提供了多种控制结构,可用来改变模板的渲染流程。
条件语句
{% if user %}
Hello, {{ user }}!
{% else %}
Hello, Stranger!
{% endif %}
循环语句
<ul>
{% for comment in comments %}
<li>{{ comment }}</li>
{% endfor %}
</ul>
宏
{% macro render_comment(comment) %}
<li>{{ comment }}</li>
{% endmacro %}
<ul>
{% for comment in comments %}
{{ render_comment(comment) }}
{% endfor %}
</ul>
需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复:
{% include 'common.html' %}
模板继承
模板继承是一种强大的复用代码的方式。
首先,创建一个名为 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的块。
衍生模板示例
{% 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()获取原来的内容。
经模板的衍生,上述html代码已经变成:
<html>
<head>
{% block head %}
<title>{% block title %}Index{% endblock %} - My Application</title>
<style>
</style>
{% endblock %}
</head>
<body>
{% block body %}
<h1>Hello, World!</h1>
{% endblock %}
</body>
</html>
参考:
《FlaskWeb开发:基于python的web应用开发实战》
Python Flask Jinja2模板引擎的更多相关文章
- 02 flask 请求钩子、异常捕获、上下文、Flask-Script 扩展、jinja2 模板引擎、csrf防范
一 请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个 ...
- Flask从入门到精通之Jinja2模板引擎
我们使用一个简单的例子切入到Jinja2模板引擎,形式最简单的Jinja2模板引擎就是一个包含响应文本的文件,实例如下: <h1>Hello World!</h1> 最简单的包 ...
- Flask 框架下 Jinja2 模板引擎高层 API 类——Environment
Environment 类版本: 本文所描述的 Environment 类对应于 Jinja2-2.7 版本. Environment 类功能: Environment 是 Jinja2 中的一个 ...
- 初探 Python Flask+Jinja2 SSTI
初探 Python Flask+Jinja2 SSTI 文章首发安全客:https://www.anquanke.com/post/id/226900 SSTI简介 SSTI主要是因为某些语言的框架中 ...
- Python——Flask框架——模板
一.渲染模板 render_template 函数把Jinja2模板引擎集成到程序中 二.Jinja2变量过滤器 过滤器名 说明 safe 渲染值是不转义 capitalize 把值得首字母转换成大写 ...
- 使用jinja2模板引擎生成html文件
使用jinja2模板引擎生成html文件 jinja2是纯Python的模板引擎,是仿照Django模板的Python模板语言. 它速度快,被广泛使用,提供了可选的沙箱模板执行环境保证安全. 使用pi ...
- 【Python-Django】Jinja2模板引擎配置教程详解!!!!
Jinjia2的官方文档:http://jinja.pocoo.org/docs/2.10/ 1. 安装Jinja2扩展包 $ pip install Jinja2 2. 配置Jinja2模板引擎 T ...
- flask框架下的jinja2模板引擎(2)(过滤器与自定义过滤器)
flask框架下的jinja2模块引擎(1):https://www.cnblogs.com/chichung/p/9774556.html 这篇论文主要用来记录下 jinja2 的过滤器. 什么是过 ...
- flask框架下的jinja2模板引擎(1)(模板渲染)
#转载请留言联系 模板是什么? 在 flask 框架中,视图函数有两个作用:处理业务逻辑和返回响应内容.在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.模板作用即是承担视图函 ...
随机推荐
- 8.2.1-优化SELECT语句
8.2.1.优化 SELECT 语句 由SELECT 语句组成的查询,在数据中执行所有的查询.对这类语句的调优排在首位,无论是调优动态web网页的二级响应时间,还是减少生成巨大隔夜报告的时间. 而且, ...
- 【转】Exchange Server 的防火墙开放端口
关于exchange所用到的端口参阅下面的文档, 适用于exchange2010sp2. http://technet.microsoft.com/en-us/library/bb331973.asp ...
- 《算法》第四章部分程序 part 16
▶ 书中第四章部分程序,包括在加上自己补充的代码,Dijkstra 算法求有向 / 无向图最短路径,以及所有顶点对之间的最短路径 ● Dijkstra 算法求有向图最短路径 package packa ...
- dubbo 学习资料
入门: http://www.tuicool.com/articles/FnE3em http://www.cnblogs.com/xuyatao/p/6869231.html 最好 http://w ...
- Android dialog使用
翻译自:开发->API 指南->User Interface & Navigation->Dialogs 注意: dialog是一个基类,但是我们应该尽可能避免直接使用dia ...
- Nginx 设置负载均衡
1. 在nginx配置文件目录下另外单独创建一个文件用于管理负载均衡配置,这里起名为 fzjh.conf vim /etc/nginx/fzjh.conf #在文件下添加以下内容 upstream m ...
- Linux定时任务 结合PHP实现实时监控
首先说说cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 crontab 工具来配置 cron 任务. 所有用户定义的 crontab 都被保存在/var/spool/cron ...
- 【Source Insight 】之marco学习笔记1
我们学习编程语言都是从Hello World!,现在我们学习marco也不例外 打开C:\Users\%USERPROFILE%\Documents\Source Insight 4.0\Projec ...
- webpack环境搭建
环境搭建参考:Webpack+vue+element逐步搭建开发环境 webpack入门:http://www.jianshu.com/p/42e11515c10f ----------------- ...
- HashMap.put()和get()原理
/** * Returns the value to which the specified key is mapped, * or if this map contains no mapping f ...