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私房菜(基础篇)——第五章:首次登入与在线求助 man page笔记
1.X Winsows与文本模式的切换 ●[Ctrl] + [Alt] + [F1] ~ [F6] :文字接口登入 tty1 ~ tty6 终端机. ●[Ctrl] + [Alt] + ...
- css-position之fixed vs sticky
css-position之fixed vs sticky fixed(固定定位) 元素相对于浏览器窗口是固定的,即使是窗口滚动,元素也是固定的 sticky(粘性定位) 基于用户滚定动来进行定位的, ...
- 【Linux常见命令】diff命令
diff - compare files line by line diff命令用于比较文件的差异. diff以逐行的方式,比较文本文件的异同处. 如果指定要比较目录,则diff会比较目录中相同文件名 ...
- 如何在github上递交高质量的pull request
开源的一大乐趣就是任何人都可以参与其中.试想下一个流行的项目就有你贡献的代码,是一件多么爽的事情!你可以帮助项目健康发展,添加你希望添加的功能,以及修复你发现的BUG. 作为全球最大的开源社区GitH ...
- 数据开源工具:Hadoop为企业带来什么?
熟悉大数据的人一定不会对大名鼎鼎的Hadoop工具陌生,Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.Hadoop的框架最核 ...
- SocksCap64应用程序通过SOCKS代理
一.下载SocksCap64 https://pan.baidu.com/s/1B671kT9R6Zb6ch1mc4Kb2Q 提取码:hai3 一个是免安装版本,一个是安装版本,选一个即可. 下面以免 ...
- 数论--HDU 1495 非常可乐
Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和se ...
- P1468 派对灯 Party Lamps(BIG 模拟)
题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄 ...
- [LOJ2865] P4899 [IOI2018] werewolf 狼人
P4899 [IOI2018] werewolf 狼人 LOJ#2865.「IOI2018」狼人,第一次AC交互题 kruskal 重构树+主席树 其实知道重构树的算法的话,难度就主要在主席树上 习惯 ...
- 1) drf 整体了解
一.接口 """ 1.什么是接口:url+请求参数+响应数据 | 接口文档 2.接口规范: url:https,api,资源(名词复数),v1,get|post表示操 ...