0x002-jinja2静态模板应用

概述

在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 %}