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. Asynchronous Disk I/O Appears as Synchronous on Windows

    Summary File I/O on Microsoft Windows can be synchronous or asynchronous. The default behavior for I ...

  2. Windows Server挂载NFS共享

    NFS:即为网络文件系统. 主要功能:通过网络(局域网)让不同的主机系统之间可以共享文件或目录. 主要用途:NFS网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件. 关于端口使用说明: 1 ...

  3. Libra白皮书解读

    文章目录 Libra简介 Libra区块链 Libra货币和存储 Libra协会 Libra简介 Libra是facebook发起的一个区块链项目,其使命是建立一套简单的.无国界的货币和为数十亿人服务 ...

  4. [转] Exchange 2013 安装部署详解

    ·Exchange 2013 部署:系统要求 823 / 3 部署 系统要求 Exchange 2013 zhou_ping 2013-02-17 ·Exchange 2013 部署:先决条件 752 ...

  5. (原創) 如何在Nios II顯示8位數的七段顯示器? (SOC) (Nios II) (SOPC Builder) (DE2-70)

    Abstract本文討論如何在Nios II控制8位數的七段顯示器. Introduction使用環境:Quartus II 8.0 + Nios II EDS 8.0 + DE2-70 (Cyclo ...

  6. 多线程——继承Thread 类和实现Runnable 接口的区别

    java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点: 首先,java只能单继承,因此 ...

  7. Cisco 交换机启用netflow

    Router2951#configure terminal //Creating Flow Record router2951(config)# flow record NTArecord route ...

  8. windows 7或以上系统的实用小工具,你知道么?

    今晚给大家介绍个实用的好工具,可以做简单的问题记录,再也不用截图加注释这么辛苦了····· 经测试,这东东在win7,2008 及2008R2里适用,也就是说,在win7以上的系统中才有.好了,下面直 ...

  9. POJ - 2387 Til the Cows Come Home (最短路入门)

    Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before ...

  10. App 抓包代理设置

    1.设置 Fiddler 打开 Fiddler,Tools  -->  Fiddler Options  -->  HTPS (配置完后记得要重启 Fiddler) 选中  "D ...