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. 如何给 Visual Studio 的输出程序添加版本信息

    出处:https://stackoverflow.com/questions/284258/how-do-i-set-the-version-information-for-an-existing-e ...

  2. 一份中外结合的 Machine Learning 自学计划

    看了Siraj Raval的3个月学习机器学习计划的视频,感觉非常好,地址:https://www.youtube.com/watch?v=Cr6VqTRO1v0 结合一些我们学习中的经验得出一份Hy ...

  3. nginx平滑升级、在线添加模块(tengine 动态加载模块)

    http://www.orzace.com/how-to-upgrade-nginx/ 下面是nginx替换成tengine再加上lua 模块,(tengine-2.0.1版本暂时无法动态加载lua模 ...

  4. 修复.NET的HttpClient

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 早在2016年我们就报道过 ,.NET的HttpClient存在一些问题.随着.NET Co ...

  5. 用VC实现洪水攻击程序

    本文为原创,如需转载,请注明作者和出处,谢谢! 一.             什么是洪水攻击 洪水之猛.势不可挡.如果将洪水比作对计算机的攻击,那大家可以想象得出,攻击是多的猛烈. 在安全领域所指的洪 ...

  6. CodeForces-1058B B. Vasya and Cornfield

    这题,我真的不知道题解是啥,自己看代码吧. #include<iostream> using namespace std; int main() { int n, d,m,i,x,y; c ...

  7. P1465 序言页码 Preface Numbering (手推)

    题目描述 一类书的序言是以罗马数字标页码的.传统罗马数字用单个字母表示特定的数值,以下是标准数字表: I 1 V 5 X 10 L 50 C 100 D 500 M 1000 最多3个同样的可以表示为 ...

  8. python(logging 模块)

    1.logging 模块的日志级别 DEBUG:最详细的日志信息,典型应用场景是 问题诊断 INFO:信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 ...

  9. nginx的数据结构集合(随时更新)

    在学习nginx的时候,因为其数据结构略多,看过后一般就忘记了.所以边学习边记录在这里吧,方便以后查看. ngx_buf_t:缓冲区结点 1: typedef struct ngx_buf_s ngx ...

  10. 一个简单的wed服务器SHTTPD(9)————main函数文件,Makefile,头文件

    主函数: #include "lcw_shttpd.h" //初始化时服务器的默认配置 extern struct conf_opts conf_para= { "/us ...