flask的模板功能都是有jinja2实现的,html文件要放在template中。
注意:文件名不能更改,只能用这个。
模板的表达式都是包含在分隔符”{{ }}”内的;控制语句都是包含在分隔符”{% %}”内的
另外,模板也支持注释,都是包含在分隔符”{# #}”内,支持块注释。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/index')
def index():
name = 5
return render_template('hello.html', name=name)
if __name__ == '__main__':
app.run(debug=True)
hello.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1> {{ name }} </h1>
</body>
</html>
游览器运行结果
当需要判断时hello.py文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
{% if name>1 %}
{{ name }} 大于1
{% else %}
{{name}}不大于1
{% endif %}
</body>
</html>
游览器运行结果
一.控制语句
Jinja2的控制语句主要就是条件控制语句if,和循环控制语句for。
main.py文件中。
注意:路由用了蓝图注册。
@admin_blue.route('/hello')
@admin_blue.route('/hello/<name>')
def hello(name = None):
return render_template('hello1.html',name = name )
hello1.html文件
{% if name and name == 'admin' %}
<h1>This is admin console</h1>
{% elif name %}
<h1>Welcome {{ name }}!</h1>
{% else %}
<h1>Please login</h1>
{% endif %}
在游览器中依次输入
http://127.0.0.1:5000/admin
http://127.0.0.1:5000/大猪猪
http://127.0.0.1:5000/
游览器中运行结果:
注意:if控制语句要用”{% endif %}”来结束 。
再次修改user.py文件,将一个列表渲染到html列表中
@admin_blue.route('/hello')
@admin_blue.route('/hello/<name>')
def hello(name = None):
return render_template('hello1.html',name = name, digits=[1,2,3,4,5],
users=[{'name':'John'},
{'name':'Tom', 'hidden':True},
{'name':'Lisa'},
{'name':'Bob'}]
)
hello1.py文件
{% if name and name == 'admin' %}
<h1>This is admin console</h1>
{% elif name %}
<h1>Welcome {{ name }}!</h1>
{% else %}
<h1>Please login</h1>
{% endif %}
{% for digit in digits %}
{{ digit }}
{% endfor %}
游览器运行结果
注意:
如果想去掉空格 ,就要在”for”语句的最后,和”endfor”语句的最前面各加上一个”-“号。如:
{% for digit in digits -%}
{{ digit }}
{%- endfor %}
二.表达式
表达式一般有这么几种:
1.最常用的是变量,由Flask渲染模板时传过来,比如上例中的”name”
2.也可以是任意一种Python基础类型,比如字符串{{ “Hello” }},用引号括起;或者数值,列表,元祖,字典,布尔值。直接显示基础类型没啥意义,一般配合其他表达式一起用
3.运算。包括算数运算,如{{ 2 + 3 }};比较运算,如{{ 2 > 1 }};逻辑运算,如{{ False and True }}
4.过滤器“|”和测试器“is”。
5.函数调用,如{{ current_time() }};数组下标操作,如{{ arr[1] }}
6.“in”操作符,如{{ 1 in [1,2,3] }}
7.字符串连接符”~”,作用同Python中的”+”一样,如{{ “Hello ” ~ name ~ “!” }}
8.“if”关键字,如{{ ‘Hi, %s’ % name if name }}。这里的”if”不是条件控制语句。