Flask 的 template模板 与 jinja2语法
Flask 的 template模板 与 jinja2语法
Flask使用的是Jinja2模板,所以其语法和Django基本无差别
>## 1、模板基本数据的渲染
变量 {{..}}
列表 {% for item in List %}<li>{{item}}</li>{% endfor %}
字典 {% for k,v in Dict.items() %}<li>{{k}}{{v}}</li>{% endfor %}
>## 2 注意:Markup等价django的mark_safe 用于返回有效的html标签
也可以像django一样使用 {{data|safe}}
>## 3 像django的simple_tag, filter 一样,传递自定义的函数
局部函数 -- 只能在传入的template中使用,直接定义,传递
def add_num(a,b):
return int(a) + int(b)
返回时:
return render_template('..html','add_num':add_num)
使用:
{{add_num(1,2)}}
全局 -- 全局使用
django 的 filter可以当做if条件
需要 @app.template_global()装饰器
def func(a,b,c) --->> 全局temlate使用 {{func(a,b,c)}}
和 @app.template_filter()装饰器
def func(a,b,c) --->> 全局temlate使用 {{a|filter(b,c)}} # 需要管道符
>## 4 模板继承
{% extends 'layout.html' %}
{% block body %}
{% endblock %}
{% include 'asd.html' %}
>## 5 定义宏: 相当于定义函数来控制html的内容
一般是用于多次会用到的地方,比如分页
在需要重用的html中写,paginator.html:
{% macro page(data,url) -%}
{% if data %}
<ul class="pagination pagination-sm no-margin">
<li><a href="{{ url_for(url,page=1) }}">首页</a></li>
{% if data.has_prev %}
<li><a href="{{ url_for(url,page=data.prev_num) }}">上一页</a></li>
{% else %}
<li class="disabled"><a href="">上一页</a></li>
{% endif %}
{% for v in data.iter_pages() %}
{% if v == data.page %}
<li class="active"><a href="{{ url_for(url,page=v) }}">{{ v }}</a></li>
{% else %}
<li><a href="{{ url_for(url,page=v) }}">{{ v }}</a></li>
{% endif %}
{% endfor %}
{% if data.has_next %}
<li><a href="{{ url_for(url,page=data.next_num) }}">下一页</a></li>
{% else %}
<li class="disabled"><a href="">下一页</a></li>
{% endif %}
<li><a href="{{ url_for(url,page=data.pages) }}">尾页</a></li>
</ul>
{% endif %}
{%- endmacro %}
调用:
{% import 'admin/paginator.html' as pg %}
{{ pg.page(page_data,'admin.tag_list') }}
例子:
视图中:
from flask import Flask,redirect,Markup,render_template,make_response
app = Flask(__name__)
# 全局使用
@app.template_filter()
def Filter(a,b,c):
return min(a,b,c)
# 全局使用
@app.template_global()
def Global(a,b,c):
return a + b + c
# 自定义函数 -- 局部
def add_num(a,b):
return int(a) + int(b)
@app.route('/index',endpoint='index',methods=['GET'])
def index():
Dict = {
'List':[1,2,3],
'Dict':{'amy':18,'bob':20},
'Str':'hello',
'add_num':add_num,
'tag':Markup('<a href="#">点击</a>') # 或者在templates中使用 |safe
}
response = make_response(render_template('index.html',**Dict))
return response
if __name__ == '__main__':
app.run()
html中:
<p>hello!</p>
<p>字符串:{{Str}}</p>
<ul>
列表:
{% for item in List %}
<li>
{{item}}
</li>
{% endfor %}
字典:
{% for k,v in Dict.items() %}
<li>
{{k}}{{v}}
</li>
{% endfor %}
</ul>
<p>自定义加法函数:{{add_num(1,4)}}</p>
<p>全局函数global:{{Global(1,4,5)}}</p>
<p>全局函数filter:{{1|Filter(1,4)}}</p>
html标签:{{tag}}
输出结果

Flask 的 template模板 与 jinja2语法的更多相关文章
- Flask中的模板语言jinja2
jinja2介绍 jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用. jinja2的优点 jin ...
- 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 ...
- Flask 中的模板语言 Jinja2 及 render_template 的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- Flask入门模板Jinja2语法与函数(四)
1 模板的创建 模板文件结构: project/ templates/ 模板文件 跳转模板一般使用: from flask import render_template,render_template ...
- python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)
一.Flask初识 首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 三大主流Web框架对比 ...
- 【 Python】模块学习之Flask模板引擎:jinja2
原文链接:https://www.cnblogs.com/dachenzi/p/8242713.html 模板的概念 要了解jinja2,那么需要先理解模板的概念.模板在Python的web开发中广泛 ...
- Flask - 模板语言jinja2 和render_template高级用法
目录 Flask - 模板语言jinja2 和render_template高级用法 一. 字典传递至前端 二. 列表传入前端Jinja2 模板的操作: 三. 大字典传入前端 Jinja2 模板 四. ...
随机推荐
- __BEGIN_DECLS __END_DECLS
http://hi.baidu.com/xiaoxiaolq/blog/item/1edc2af30dd4915a342acc5e.html对__BEGIN_DECLS 和 __END_DECLS 的 ...
- Django基础——模板层(template) (Day67)
阅读目录 变量 标签 自定义过滤器和标签 模板层(template) 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. 1 2 3 4 ...
- Rest Framework源码流程解析
目录: 一 整体流程 二 具体流程 一 请求进来之后,都要先执行dispatch方法,dispatch方法根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的d ...
- Deep Learning(深度学习)学习系列
目录: 一.概述 二.背景 三.人脑视觉机理 四.关于特征 4.1.特征表示的粒度 4.2.初级(浅层)特征表示 4.3.结构性特征表示 4.4 ...
- 阻塞方法与InterruptedException
什么是阻塞方法?为什么会抛出InterruptedException? 一般方法的完成只取决于它所要做的事情,以及是否有足够多可用的计算资源(CPU 周期和内存). 而阻塞方法的完成还取决于一些外部的 ...
- Win32 API编程:显示系统进程列表
#include <windows.h> #include <tlhelp32.h> // 声明快照函数的头文件 #include "tchar.h" #i ...
- windows技巧--一次关闭所有资源管理器目录,文件夹目录
每天开机工作一段时间以后,你可能会和我一样,打开了很多的文件目录,于是一个一个的点窗口关闭.于是想有没有一次关闭所有目录的办法~~咚咚咚,经过一番寻觅,下面是我找到的办法 新建bat文件 close_ ...
- Python 私有化属性
# 对象的基本理论 # 什么事对象? # 万物皆对象 # 对象是具体物体 # 拥有属性 # 拥有行为 # 把很多零散的东西,封装成为一个整体 # 举例:王二小 # 属性 # 姓名 # 年龄 # 身高 ...
- Logback Pattern 日志格式配置
Logback日志配置示例 <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppe ...
- LeetCode——Keyboard Row
LeetCode--Keyboard Row Question Given a List of words, return the words that can be typed using lett ...