flask之jinjia2模板语言

flask_jinjia2.py
'''
flask中的jinjia2模板语言(和django中模板类似):
(1)模板变量{{ }} (2)模板标签{% %}
①for循环遍历
{% for foo in %}
......
{% endfor %}
②if...else判断
{% if %}
...
{% elif %}
...
{% else %}
...
{% endif %}
(3)模板继承{% extends html文件 %},配合模板中定义的block重写需要改动的部分
{% extends 'base.html' %}
{% block 模板中块名 %}
......
{% endblock %} (4)模板组件{% include html文件 %}在页面中引入html组件 (5)通过后端特殊装饰器定义函数在模板中直接时候用
①@app.template_global()装饰的函数直接以模板变量函数调用方式使用,如{{ sum(1,2) }}
②@app.template_filter()装饰的函数直接以模板变量过滤器形式使用,第一个参数自动为变量,如{{ 1 | sum2(2,3,4) }} (6)jinjia2模板语言中的宏定义
在模板中先定义:
{% macro 定义宏(形参,形参...) %}
html标签使用参数
{% endmacro %} 在模板中使用定义的宏:
{{ 宏(实参,实参...) }} 实例:
<div>
{% macro type_text(name,type) %}
<input type="{{ type }}" name="{{ name }}" value="{{ name }}">
{% endmacro %} {{ type_text("one","text") }}
{{ type_text("two","text") }}
</div> (7)模板过滤器safe及flask中的Markup使用
返回html标签可以在模板中使用过滤器safe确保安全正常渲染成标签
也可以在后端flask项目中通过Markup()实例化之后记性渲染 ''' from flask import Flask, render_template,Markup app = Flask(__name__) STUDENT = {'name': 'Old', 'age': 38, 'gender': '中'}, STUDENT_LIST = [
{'name': 'Old', 'age': 38, 'gender': '中'},
{'name': 'Boy', 'age': 73, 'gender': '男'},
{'name': 'EDU', 'age': 84, 'gender': '女'}
] STUDENT_DICT = {
1: {'name': 'Old', 'age': 38, 'gender': '中'},
2: {'name': 'Boy', 'age': 73, 'gender': '男'},
3: {'name': 'EDU', 'age': 84, 'gender': '女'},
} # 模板变量和标签使用以及Markup()返回标签
@app.route('/jinjia2')
def data():
title='<h2>后端Markup()返回的标签</h2>'
markup_title=Markup(title)
return render_template('jinjia2daemo.html', st=STUDENT, stl=STUDENT_LIST, std=STUDENT_DICT,title=markup_title)
# return render_template('jinjia2daemo.html',**{'st':STUDENT,'stl':STUDENT_LIST,'std':STUDENT_DICT}) # 特殊装饰器函数在模板中的全局使用
@app.template_global()
def sum1(a, b):
return a + b @app.template_filter()
def sum2(a, b, c, d): # 第一个参数为模板变量
return a + b + c + d if __name__ == '__main__':
app.run(debug=True)
jinjia2daemo.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>data</title>
</head>
<body> <div>{{ title }}</div> <!--单个模板变量使用-->
<div>
<h2>单个学生</h2> {{ st }}
</div>
<!--模板标签for/if使用-->
<div>
<h2>列表嵌套字典数据</h2> {{ stl }}
<table border="1px">
<tr>
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for obj in stl %}
<tr>
<td>{{ obj.name }}</td>
<td>{{ obj.age }}</td>
<td>
{% if obj.gender in ['男','女'] %}
{{ obj.gender }}
{% else %}
'男'
{% endif %}
</td>
</tr>
{% endfor %}
</table>
</div> <div>
<h2>字典嵌套字典数据</h2> {{ stl }}
<table border="1px">
<tr>
<td>id</td>
<td>name</td>
<td>age</td>
<td>gender</td>
</tr>
{% for id,data in std.items() %}
<tr>
<td>{{ id }}</td>
<td>{{ data.name }}</td>
<td>{{ data.age }}</td>
<td>
{% if data.gender in ['男','女'] %}
{{ data.gender }}
{% else %}
'男'
{% endif %}
</td>
</tr>
{% endfor %}
</table>
</div> <div>
<h2>特殊装饰器自定义的函数直接在模板中使用</h2>
{{ sum1(1,2) }}
<br>
{{ 1 | sum2(2,3,4) }}
</div> <!--jinjia2模板语言中的宏定义-->
<div>
<h2>jinjia2模板语言中的宏定义</h2>
<div>
{% macro type_text(name,type) %}
<input type="{{ type }}" name="{{ name }}" value="{{ name }}">
{% endmacro %} {{ type_text("one","text") }}
{{ type_text("two","text") }}
</div>
</div> </body>
</html>
flask之jinjia2模板语言的更多相关文章
- [Python自学] Flask框架 (1) (Flask介绍、配置、Session、路由、请求和响应、Jinjia2模板语言、视图装饰器)
oldboy:s9day114 参考博客:https://www.cnblogs.com/wupeiqi/articles/7552008.html 一.Flask简介 1.安装Flask pip i ...
- flask中jinjia2模板引擎详解4
接上文 For循环 和其它编程语言一样,for用来编辑列表中的项.下面以一个例子来说明for在flask的jinjia2模板中的使用. 创建一个模板list.html 代码如下{% extends & ...
- 初识Flask框架,以及Flask中的模板语言jinjia2和Flask内置的Session
一.web框架的对比 首先我们先来看下比较火的web框架 1.Django: 优点:大而全,所有组件都是组织内部开发高度定制化,教科书级别的框架 缺点:大到浪费资源,请求的时候需要的资源较高 2.Fl ...
- flask中jinjia2模板引擎使用详解1
在之前的文章中我们介绍过flask调用jinja2模板的基本使用,这次我们来说一下jinjia2模板的使用 Jinja2 在其是一个 Python 2.4 库之前,被设计 为是灵活.快速和安全的. 模 ...
- flask中jinjia2模板使用详解2
接上文 注释的使用 在jinjia2模板中,使用{# #}进行代码注释,如下所示 运行后发现,注释不会被render出来 去掉空行 两种方法可以去掉jinjia2模板中的空白行,一是设置jinjia2 ...
- 【Flask】 Jinja2模板语言
Jinja2 Jinja2是Python Web编程中的主流模板语言.因为flask是基于Jinja2和Werkzeug发展而来,在安装flask的时候jinja2自动就被装在上面了. 之前提到了很多 ...
- Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- 3,Flask 中的模板语言 Jinja2 及 render_template 的深度用法
Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符串,用于传递到前端 S ...
随机推荐
- linux--配置开发环境 --Apache篇
现在我的的linux服务器上一般都是使用:Apache 和 Nginx 这两种配置. 你现在安装好了,启动了,也无法通过你服务器绑定的网址访问你的网站. 这是你可以通过这个命令查看一下你的80端口: ...
- 编译原理-第四章 语法分析-4.6 简单LR技术
简单LR分析方法 一.LR语言分析器模型与算法 1.输入.输出.栈和方法 2.LR语法分析表 3.LR分析程序 4.例 例1: 例2: 二.LR语法分析算法 1.LR语法分析算法的定义和概念 定义: ...
- 抖音人脸识别Autojs脚本
title: 抖音人脸识别Autojs脚本 用Autojs写的抖音人脸颜值检测脚本 疫情期间宅家久了,昨天闲着没事(好吧,有事情,但是我不想做) ,消费之火熊熊燃烧.一咬牙把Autojs入正了.我 ...
- Android 5.0系统默认颜色
伴随着 Android5.0 的发布也更新了support-v7-appcompat 到 V21,其中增加了 ToolBar.recyclerview.cardview 等控件. Android5.0 ...
- java之重载与重写
重写(override) 重写是子类对父类的允许访问的方法的重新编写,方法名,返回值类型和形参列表都不能改变,唯一恩能够改变的是方法体. 重写的好处是可以根据子类的需要的行为来实现父类的方法. 重写方 ...
- python连接mysql数据表查询表获取数据导入到txt中
import pymysql'''连接mysql数据表查询表获取数据导入到txt中'''#查询结果写入数据到txtdef get_loan_number(file_txt): connect = py ...
- VR全景视图 Google VrPanoramaView
2019独角兽企业重金招聘Python工程师标准>>> 一.背景简介 Welcome to VR at Google 进入Google VR主页,发现官方给我们提供了两套解决观看VR ...
- Gartner:2016 Q2全球服务器市场,中国再度成为亮点
对于IT产品供应商来说,Gartner.IDC等第三方分析机构市场调研报告无疑是一次"中考",成绩优异的论功行赏,迎接鲜花和掌声:差强人意,批斗会将是不可避免的,接下来加班加点,力 ...
- ffmpeg+SDL2实现的音频播放器V2.0(无杂音)
1. 前言 目前为止,学习了并记录了ffmpeg+SDL2显示视频以及事件(event)的内容. 这篇中记录ffmpeg+SDL2播放音频,没加入事件处理. 接下来加入事件处理并继续学习音视频同步,再 ...
- Jenkins+Jmeter+Ant 生成测试报告
<?xml version="1.0" encoding="UTF-8"?> <project name="wms_test&quo ...