Flask 模版
模版基础
1、模板的使用
Flask使用的是Jinja2模板,所以其语法和Django无差别
2、自定义模板方法
Flask中自定义模板方法的方式和Bottle相似,创建一个函数并通过参数的形式传入render_template,如:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>自定义函数</h1>
{{ww()|safe}}
</body>
</html>
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask,render_template
app = Flask(__name__)
def wupeiqi():
return '<h1>Wupeiqi</h1>'
@app.route('/login', methods=['GET', 'POST'])
def login():
return render_template('login.html', ww=wupeiqi)
app.run()
模版引擎
template.py
from flask import Flask, render_template
from markupsafe import Markup
app = Flask(__name__)
app.debug = True
# 定义全局中,每个模版都可以调用kkk这个函数
@app.template_global()
def kkk(a1, a2):
return a1 + a2
def gen_input(value):
# 使用Markup对象来标记文本为安全文本,防止再次转义
return Markup('<input value="%s" />' % value)
@app.route('/', methods=['GET', 'POST'])
def index():
coutext = {
'k1': 123,
'k2': [111, 222, 333],
'k3': {'name': 'xiaoming', 'age': 18},
'k4': lambda x: x + 1,
'k5': gen_input
}
return render_template('index.html', **coutext)
@app.route('/order', methods=['GET', 'POST'])
def order():
coutext = {
'k1': 123,
'k2': [111, 222, 333],
}
return render_template('order.html', **coutext)
if __name__ == '__main__':
app.run()
继承模版 layout.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>头部</div>
<div>
{% block content %}
{% endblock %}
</div>
<div>底部</div>
</body>
</html>
index.html
{% extends 'layout.html '%}
{% block content %}
<h1>{{k1}}</h1>
<h2>{{k2.0}} {{k2[0]}}</h2>
<h3>{{k3.name}} {{k3['name']}} {{k3.get('name',888)}}</h3>
<h4>{{k4(66)}}</h4>
<!-- <h4>{{k5(66)|safe}}</h4>-->
<h5>{{k5(66)|safe}}</h5>
<h1>{{kkk(35,46)}}</h1>
{% endblock %}
order.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>order模版</title>
</head>
<body>
<h1>{{k1}}</h1>
<h1>{{k2.0}}</h1>
<h1>{{kkk(35,46)}}</h1>
</body>
</html>

浙公网安备 33010602011771号