Flask - 模板 - 基于Jinja2实现

目录

一、Jinja2简单介绍

 二、Pycharm内设置基于Jinja2语法的Templates文件夹 - 用于模板语言的自动补全

三、Django模板 VS Flask模板

四、Makeup - 关闭Flask内的自动转义功能


一、Jinja2简单介绍

官方文档 - 中译

Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全

{% block title %}{% endblock %}

 二、Pycharm内设置基于Jinja2语法的Templates文件夹 - 用于模板语言的自动补全

Flask - 模板 - 基于Jinja2实现_第1张图片

Flask - 模板 - 基于Jinja2实现_第2张图片

Flask - 模板 - 基于Jinja2实现_第3张图片

 

Flask - 模板 - 基于Jinja2实现_第4张图片

三、Django模板 VS Flask模板

由于jinja2仿照Django的模板层进行开发,于是很大程度上可以参考Django模板的使用方式;而不同之处仅仅在于,Flask模板页可以直接使用Python函数形式执行,而Django内需要完成必须得依靠过滤器实现

简单实现

'''
py执行文件
'''
from flask import Flask, render_template

app = Flask(__name__)
app.debug = True


def func1(num, num2):
    return num + num2


@app.route('/')
def index():
    l = [1, 2, 3, 4, 5, 6]
    return render_template('templatestest.html', func=func1, a=1, b='hello', l=l)


if __name__ == '__main__':
    app.run()
'''
templatestest.html文件
'''



    
    Title


{{ func(1,2) }}
{{ a }}
{{ b }}
{% for foo in l %}
    {{ foo }}
{% endfor %}


四、Makeup - 关闭Flask内的自动转义功能

在Flask内自动转义功能默认是开启的,所以如果 name 包含 HTML ,它将会被自动转义

如果你能信任一个变量,并且你知道它是安全的(例如一个模块把 Wiki 标记转换为 HTML),你可以用 Markup 类 |safe 过滤器在模板中把它标记为安全的

本质上,Makeup的使用等价于django的make_safe的使用。

from flask import Flask, render_template
from markupsafe import Markup

app = Flask(__name__)
app.debug = True


def func2(arg):
    return Markup("" % (arg,))


def func3(arg):
    return "" % (arg,)


@app.route('/')
def index():
    return render_template('templatestest.html', func=func2, f=func3)


if __name__ == '__main__':
    app.run()



    
    Title


{{ f('默认Flask转义') }}

{{ func('Makeup 后台解转义') }}
{{ f('|safe 模板内解转义')|safe }}

Flask - 模板 - 基于Jinja2实现_第5张图片 

 

你可能感兴趣的:(Flask)