概述
在flask中,通常结合jinja2做模板的渲染。jinja2是一套流行的python模板语言
flask中静态模板的应用
jinja2简单介绍
jinja2 使用一个名为Environment的中心对象,这个类用于存储配置,全局对象。如果不是结合flask来使用jinja2的话,那么你需要使用以下的语法
1 2 3 4 5 6 7 8 9 10 11
| from jinja2 import Environment,PackageLoader
# 新建templates文件夹在当前目录下,里面放置模板 # 因为我们是直接运行这个文件,所以第一个参数填的是main。 # 如果不是当前的文件执行,可以填写python的包名 env = Environment(loader=PackageLoader('main','templates'))
template = env.get_template('index.html') with open('index.html','w')as f: f.write(template.render(title='welcome',welcome='Hello jinja2'))
|
flask中的jinja2
flask中的jinja2不用这么麻烦,只要在当前的app下面新建好templates的文件夹,在views里面就可以直接使用render_template进行模板渲染了。下面介绍常见模板用法
普通用法
1 2 3 4 5 6 7 8 9
| #microapp/templates/_layout.html <html> <head> {% block title %}{% endblock %} </head> <body> {% block main %}{% endblock %} </body> </html
|
模板继承
1 2 3 4 5 6 7 8
| # microapp/templates/index.html {% extends "_layout.html" %} {% block title %} <title>Hello</title> {% endblock %} {% block main %} <h1>here is content </h1> {% endblock %}
|
模板包含
1 2 3 4 5 6 7 8 9
| # 包含 {% extends "_layout.html" %} {% block content %} ... {% include "_posts.html" %} {% include "_pagination.html"%} </div> {% endblock %}
|
循环
1 2 3
| {% for post in posts %} ... {% endfor %}
|
条件
1 2 3
| {% if current_user.is_authenticated %} ... {% endif %}
|
变量
1 2 3 4 5
| {% with message = get_flashed_messages() %} {% if message %} alert("{{ message }}") {% endif %} {% endwith %}
|