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模板语言的更多相关文章

  1. [Python自学] Flask框架 (1) (Flask介绍、配置、Session、路由、请求和响应、Jinjia2模板语言、视图装饰器)

    oldboy:s9day114 参考博客:https://www.cnblogs.com/wupeiqi/articles/7552008.html 一.Flask简介 1.安装Flask pip i ...

  2. flask中jinjia2模板引擎详解4

    接上文 For循环 和其它编程语言一样,for用来编辑列表中的项.下面以一个例子来说明for在flask的jinjia2模板中的使用. 创建一个模板list.html 代码如下{% extends & ...

  3. 初识Flask框架,以及Flask中的模板语言jinjia2和Flask内置的Session

    一.web框架的对比 首先我们先来看下比较火的web框架 1.Django: 优点:大而全,所有组件都是组织内部开发高度定制化,教科书级别的框架 缺点:大到浪费资源,请求的时候需要的资源较高 2.Fl ...

  4. flask中jinjia2模板引擎使用详解1

    在之前的文章中我们介绍过flask调用jinja2模板的基本使用,这次我们来说一下jinjia2模板的使用 Jinja2 在其是一个 Python 2.4 库之前,被设计 为是灵活.快速和安全的. 模 ...

  5. flask中jinjia2模板使用详解2

    接上文 注释的使用 在jinjia2模板中,使用{# #}进行代码注释,如下所示 运行后发现,注释不会被render出来 去掉空行 两种方法可以去掉jinjia2模板中的空白行,一是设置jinjia2 ...

  6. 【Flask】 Jinja2模板语言

    Jinja2 Jinja2是Python Web编程中的主流模板语言.因为flask是基于Jinja2和Werkzeug发展而来,在安装flask的时候jinja2自动就被装在上面了. 之前提到了很多 ...

  7. Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法

    是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...

  8. 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法

    是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...

  9. 3,Flask 中的模板语言 Jinja2 及 render_template 的深度用法

    Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符串,用于传递到前端 S ...

随机推荐

  1. php原生函数应用

    php常见基本的函数 一.字符串函数 implode — 将一个一维数组的值转化为字符串 lcfirst — 使一个字符串的第一个字符小写 ltrim — 删除字符串开头的空白字符(或其他字符) rt ...

  2. 怎么在java 8的map中使用stream

    怎么在java 8的map中使用stream 简介 Map是java中非常常用的一个集合类型,我们通常也需要去遍历Map去获取某些值,java 8引入了Stream的概念,那么我们怎么在Map中使用S ...

  3. JDK12的五大重要新特性

    文章目录 JDK12的五大重要新特性 引入JVM常量API 扩展了switch语句 支持Unicode 11.0 为日本Reiwa Era提供了方形字符支持 NumberFormat增加了对以紧凑格式 ...

  4. LVS+Keepalived 实现高可用负载均衡集群

    LVS+Keepalived  实现高可用负载均衡集群     随着网站业务量的增长,网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如 F5 ,Array又太贵,你们又是创业型互联公司如何有效 ...

  5. Handler 机制(一)—— Handler的实现流程

    由于Android采用的是单线程模式,开发者无法在子线程中更新 UI,所以系统给我提供了 Handler 这个类来实现 UI 更新问题.本贴主要说明 Handler 的工作流程. 1. Handler ...

  6. php private学习笔记

    类的权限修饰符,放在属性/方法的前面.用来说明属性/方法的权限特点. 三种权限修饰符 private  私有的 public   公共 protected  保护的 privata 的属性.方法只能在 ...

  7. Netty(七):EventLoop学习前导——Reactor模式

    了解Netty的人多少都会知道Netty的高性能的一个原因就是它是基于事件驱动的,而这一事件的原型就是Reactor模式. 所以在学习EventLoop前,很有必要先搞懂Reactor模式. 本文目录 ...

  8. Guzzle 一个PHP的HTTP客户端

    Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上. https://github.com/guzzle/guzzle 接口简单:构建查询语句.POST请求. ...

  9. 解决 Retrofit 多 BaseUrl 及运行时动态改变 BaseUrl ?

    原文地址: juejin.im/post/597856- 解决Retrofit多BaseUrl及运行时动态改变BaseUrl(一) 解决Retrofit多BaseUrl及运行时动态改变BaseUrl( ...

  10. 手写实现java栈结构,并实现简易的计算器(基于后缀算法)

    一.定义 栈是一种线性表结构,栈结构中有两端,对栈的操作都是对栈的一端进行操作的,那么被操作的一端称为栈顶,另一端则为栈底.对栈的操作其实就是只有两种,分别是入栈(也称为压栈)和出栈(也称为弹栈).入 ...