Flask 的 template模板 与 jinja2语法

  1. Flask使用的是Jinja2模板,所以其语法和Django基本无差别

>## 1、模板基本数据的渲染

  1. 变量 {{..}}
  2. 列表 {% for item in List %}<li>{{item}}</li>{% endfor %}
  3. 字典 {% for k,v in Dict.items() %}<li>{{k}}{{v}}</li>{% endfor %}

>## 2 注意:Markup等价django的mark_safe 用于返回有效的html标签

  1. 也可以像django一样使用 {{data|safe}}

>## 3 像django的simple_tag, filter 一样,传递自定义的函数

  1. 局部函数 -- 只能在传入的template中使用,直接定义,传递
  2. def add_num(a,b):
  3. return int(a) + int(b)
  4. 返回时:
  5. return render_template('..html','add_num':add_num)
  6. 使用:
  7. {{add_num(1,2)}}
  8. 全局 -- 全局使用
  9. django filter可以当做if条件
  10. 需要 @app.template_global()装饰器
  11. def func(a,b,c) --->> 全局temlate使用 {{func(a,b,c)}}
  12. @app.template_filter()装饰器
  13. def func(a,b,c) --->> 全局temlate使用 {{a|filter(b,c)}} # 需要管道符

>## 4 模板继承

  1. {% extends 'layout.html' %}
  2. {% block body %}
  3. {% endblock %}
  4. {% include 'asd.html' %}

>## 5 定义宏: 相当于定义函数来控制html的内容

  1. 一般是用于多次会用到的地方,比如分页

在需要重用的html中写,paginator.html:

  1. {% macro page(data,url) -%}
  2. {% if data %}
  3. <ul class="pagination pagination-sm no-margin">
  4. <li><a href="{{ url_for(url,page=1) }}">首页</a></li>
  5. {% if data.has_prev %}
  6. <li><a href="{{ url_for(url,page=data.prev_num) }}">上一页</a></li>
  7. {% else %}
  8. <li class="disabled"><a href="">上一页</a></li>
  9. {% endif %}
  10. {% for v in data.iter_pages() %}
  11. {% if v == data.page %}
  12. <li class="active"><a href="{{ url_for(url,page=v) }}">{{ v }}</a></li>
  13. {% else %}
  14. <li><a href="{{ url_for(url,page=v) }}">{{ v }}</a></li>
  15. {% endif %}
  16. {% endfor %}
  17. {% if data.has_next %}
  18. <li><a href="{{ url_for(url,page=data.next_num) }}">下一页</a></li>
  19. {% else %}
  20. <li class="disabled"><a href="">下一页</a></li>
  21. {% endif %}
  22. <li><a href="{{ url_for(url,page=data.pages) }}">尾页</a></li>
  23. </ul>
  24. {% endif %}
  25. {%- endmacro %}

调用:

  1. {% import 'admin/paginator.html' as pg %}
  2. {{ pg.page(page_data,'admin.tag_list') }}

例子:

视图中:

  1. from flask import Flask,redirect,Markup,render_template,make_response
  2. app = Flask(__name__)
  3. # 全局使用
  4. @app.template_filter()
  5. def Filter(a,b,c):
  6. return min(a,b,c)
  7. # 全局使用
  8. @app.template_global()
  9. def Global(a,b,c):
  10. return a + b + c
  11. # 自定义函数 -- 局部
  12. def add_num(a,b):
  13. return int(a) + int(b)
  14. @app.route('/index',endpoint='index',methods=['GET'])
  15. def index():
  16. Dict = {
  17. 'List':[1,2,3],
  18. 'Dict':{'amy':18,'bob':20},
  19. 'Str':'hello',
  20. 'add_num':add_num,
  21. 'tag':Markup('<a href="#">点击</a>') # 或者在templates中使用 |safe
  22. }
  23. response = make_response(render_template('index.html',**Dict))
  24. return response
  25. if __name__ == '__main__':
  26. app.run()

html中:

  1. <p>hello!</p>
  2. <p>字符串:{{Str}}</p>
  3. <ul>
  4. 列表:
  5. {% for item in List %}
  6. <li>
  7. {{item}}
  8. </li>
  9. {% endfor %}
  10. 字典:
  11. {% for k,v in Dict.items() %}
  12. <li>
  13. {{k}}{{v}}
  14. </li>
  15. {% endfor %}
  16. </ul>
  17. <p>自定义加法函数:{{add_num(1,4)}}</p>
  18. <p>全局函数global:{{Global(1,4,5)}}</p>
  19. <p>全局函数filter:{{1|Filter(1,4)}}</p>
  20. html标签:{{tag}}

输出结果

Flask 的 template模板 与 jinja2语法的更多相关文章

  1. Flask中的模板语言jinja2

    jinja2介绍 jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用. jinja2的优点 jin ...

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

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

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

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

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

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

  5. Flask 中的模板语言 Jinja2 及 render_template 的深度用法

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

  6. Flask入门模板Jinja2语法与函数(四)

    1 模板的创建 模板文件结构: project/ templates/ 模板文件 跳转模板一般使用: from flask import render_template,render_template ...

  7. python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)

    一.Flask初识 首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 三大主流Web框架对比 ...

  8. 【 Python】模块学习之Flask模板引擎:jinja2

    原文链接:https://www.cnblogs.com/dachenzi/p/8242713.html 模板的概念 要了解jinja2,那么需要先理解模板的概念.模板在Python的web开发中广泛 ...

  9. Flask - 模板语言jinja2 和render_template高级用法

    目录 Flask - 模板语言jinja2 和render_template高级用法 一. 字典传递至前端 二. 列表传入前端Jinja2 模板的操作: 三. 大字典传入前端 Jinja2 模板 四. ...

随机推荐

  1. Appium的Java封装

    文章出处 http://blog.csdn.net/niubitianping/article/details/52612211 一.为什么需要封装? 封装的本意就是为了方便.简洁. 二.Androi ...

  2. 浅析造成 JS 内存泄露的几种原因及解决方案

    内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束.在C++中,因为是手动管理内存,内存泄露是经常出现的事情.而现在流行的C#和Java等语言采用了自动垃圾回收方法管理内存,正常使 ...

  3. for迭代序列的三种方式

    while循环是条件性的,for循环是迭代性的. for循环会访问所有迭代对象中的所有元素,并在所有条目都结束后结束循环. for循环迭代序列有三种基本的方式,分别是通过序列项迭代.通过索引迭代.通过 ...

  4. Github 的其他用法

    一.概述 Github 除了作为代码托管库外,有趣的程序员们还利用它解锁了有趣的新姿势. 二.新姿势 2.1 Github Pages 可以为项目建立静态主页(即gh-pages分支), 也可以建立命 ...

  5. Microservice 概念

    一天我司招财猫姐(HR 大人)问我,你给我解释一下 Microservice 是什么吧.故成此文.一切都是从一个创业公司开始的. 故事 最近的创业潮非常火爆,我禁不住诱惑也掺和了进去,创建了一家公司. ...

  6. 关于git bash的问题,pull不下来(登录之后,git帮你记住了,想切换其他用户)

    参考博客: https://www.jianshu.com/p/8a7f257e07b8 从某个项目地址pull代码下来,老是报错 fatal: Authentication failed for ' ...

  7. Python中的WebSocket

    一.Websockets介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信 ...

  8. zero-base coordinate 和one-base coordinate

    zero-base和one-base是生信会经常碰到的两套坐标系统. zero-base是半开放式的,是不包括该点的,zero-base的文件有:bed;bam one-base是封闭式的,是包括该点 ...

  9. 2018-2019-2 20165114《网络对抗技术》Exp3 免杀原理与实践

    Exp3 免杀原理与实践 目录 一.实验内容 二.基础问题回答 (1)杀软是如何检测出恶意代码的? (2)免杀是做什么? (3)免杀的基本方法有哪些? 三.实践过程记录 正确使用msf编码器,msfv ...

  10. Spring AOP 前奏--动态代理