Flask入门系列三:View层Jinja2模板引擎
Flask的view层其实就是MVC中的V,即模板,使用Jinja2模板引擎
模板继承举例代码:
run.py
#!/usr/bin/env python
#encoding:utf-8
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route('/hello/')
@app.route('/hello/<name>/<xm>')
def hello(name=None,xm=None):
return render_template('hello.html' , name = name , xm = xm)
run.py里面定义的函数hello()并不是直接返回结果,而是使用render_template()方法渲染模板,第一个参数传'hello.html'指向你想渲染的模板名称,第二个参数'name'、第三个参数'xm'是传到模板去的变量,变量可以传多个。
模板hello.html在当前目录下的子目录templates(注意,一定要使用这个名字,Pycharm在新建flask项目的时候会自动创建static和template目录)。然后在templates目录下创建文件hello.html,内容如下:
hello.html
{% extends 'header.html' %}
{% block head %}
{% if name %}
<h1>hello name:{{ name }}---{{ xm }}</h1>
{% else %}
<h1>Hello World Flask</h1>
{% endif %}
{% endblock head %}
{% block foot %}
{% endblock foot %}
在templates目录下创建header.html文件,内如如下
header.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>hi flask test</title>
</head>
<body>
<div align="center">
这里是header头部
{% block head%}
{% endblock %}
</div>
{% block foot%}
{% endblock %}
<div align="center">
<p>---------------------------</p>
这里footer底部
</div>
</body>
</html>
运行结果如下:
hello.html和header.html就是两个HTML模板,根据name变量的值,显示不同的内容。变量或表达式由”{{ }}”修饰,而控制语句由”{% %}”修饰,其他的代码,就是我们常见的HTML;
使用extends 'header.html',让hello.html继承header.html的内容
Jinja2的模板引擎还有更多强大的功能,包括for循环,过滤器等。模板里也可以直接访问内置对象如request, session等继承;
HTML自动转义:
#!/usr/bin/env python
#encoding:utf-8
from flask import Flask, Markup
from flask import render_template
app = Flask(__name__)
@app.route('/')
def index():
return Markup('<div>Hello %s 2017</div>') % '<em>Flask</em>'
if __name__ == '__main__':
app.run(host='0.0.0.0',port=8080,debug=True)
运行结果如下:
”em”标签显示在页面上了,没用被执行,即去除了html标签,Markup还有很多方法,比如”escape()”呈现HTML标签, “striptags()”去除HTML标签。
#!/usr/bin/env python
#encoding:utf-8
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '<div>Hello %s 2017</div>' % '<em>Flask</em>'
if __name__ == '__main__':
app.run(host='0.0.0.0',port=8080,debug=True)
运行结果如下:
em斜体标签被最执行了,Markup应根据实际场景灵活使用。
最后更新于 2017-02-17 17:54:44 并被添加「flask jinja2 模板 标签 继承」标签,已有 647 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处