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 ...
随机推荐
- CG-CTF(1)
CG-CTF CG-CTF题目网址:https://cgctf.nuptsast.com/challenges#Web 第一题:签到题 查看页面源代码,得到flag(干杯~): 第二题:md5 col ...
- 安装 wbemcli
安装环境 建立自己的目录后, wget http://vault.centos.org/6.0/os/x86_64/Packages/sblim-wbemcli- ...
- 【JAVA基础】11 Scanner类
1. Scanner的概述 一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器. Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配.然后可以使用不同的 ne ...
- 【JAVA基础】08 面向对象3
1. 多态 多态polymorhic概述 事物存在的多种形态. 多态前提 要有继承关系 要有方法重写 要有父类引用指向子类对象 案例演示 代码体现多态 class Demo1_Polymorphic{ ...
- How to get binary string from ArrayBuffer?
https://stackoverflow.com/questions/16363419/how-to-get-binary-string-from-arraybuffer https://stack ...
- 贪心--HDU 2021 发工资咯
Description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵,但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就 ...
- IDEA 打可执行jar包(maven项目)
1. Ctrl+Shift+Alt+S 打开 Project Structure 2.选择要执行的文件, 依次选择 项目, 方法所在文件(必须有main方法), 保存 3.如果之前路径下曾经打过 ...
- 服务器安装JDK
1.卸载OpenJDK, 安装OracleJDK a.一般的LINUX发行版内置OpenJDK, 相当于JDK的开源版本(我们平时使用的JDK特指OracleJDK) b.OpenJDK 不能使用ja ...
- 在html中使用vue组件
最近在维护公司的项目,当我拿到项目时,发现他用了vue. 但是~~仅仅是引用vue.js文件,整体的架构还是html那种,没有用webpack! 当时觉得~哇~原来还可以这样! 然后了解了业务逻辑和代 ...
- 高精度封装Bignum
还没有写完,目前只实现了加,乘,且不能作用于负数 \(update\ in 20.4.8 添加了高精除低精ddiv函数,比较大小comp函数\) #include <bits/stdc++.h& ...