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

  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. Java读写.properties文件实例,解决中文乱码问题

    package com.lxk.propertyFileTest; import java.io.*; import java.util.Properties; /** * 读写properties文 ...

  2. 微信小程序组件checkbox

    表单组件checkbox:官方文档 Demo Code: JS Page({ data:{ items:[ {name: 'USA', value: '美国'}, {name: 'CHN', valu ...

  3. 转:MVC遇上bootstrap后的ajax表单验证

    使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了,而且有模型在使用模型验证更方便点.怎么解决呢? 当 ...

  4. 【转】PCA与Whitening

    PCA: PCA的具有2个功能,一是维数约简(可以加快算法的训练速度,减小内存消耗等),一是数据的可视化. PCA并不是线性回归,因为线性回归是保证得到的函数是y值方面误差最小,而PCA是保证得到的函 ...

  5. $ git学习总结系列(3)——分支管理

    本文主要介绍git分支的概念及常用分支操作. 分支的概念 所谓分支,可以理解成一个个相互独立的工作空间,在每一个分支上的改动不会影响到其他分支的代码.git默认的分支是master分支. 试想一下这样 ...

  6. 通过FFmpeg将多媒体文件解码后保存成Bmp图像(YUV420 RGB32)

    /* g++ -o test test.cpp -lavformat -lavcodec -lavutil -lz -lm -lpthread -lswscale */ #include <st ...

  7. springboot与redis的无缝整合(分布式)

    参考博客 : https://blog.csdn.net/csao204282/article/details/54092997 1 首先得引入依赖 <dependency> <gr ...

  8. [pixhawk笔记]4-如何写一个简单的应用程序

    本文主要内容来自于:https://dev.px4.io/en/tutorials/tutorial_hello_sky.html,并对文档中的部分问题进行更正. 本文假设已经建立好开发环境并能正确编 ...

  9. SQL注入导图

    本图来自信安之路学生渗透小组@辽宁-web-TwoDog, 博主觉得这张图画的很好,所以贴在这里提供参考!

  10. 一些好用的Linux命令工具

    刚好看到一个系列的博文,讲的就是那些平时很少被人用到但是很实用的命令,选一些觉得自己应该比较常用到的出来写个笔记. 这些命令有些不是系统命令,需要自行下载安装.Debian下安装:sudo apt-g ...