继续使用上一节的模板,模板如下:
microblog\
venv\
app\
__init__.py
routes.py
microblog.py
本节主要是记录,模板的使用和条件语句,循环的的使用
在使用模板之前需要创建一个存储模板的目录,在app的目录下创建一个templates文件夹,在文件app/templates/index.html中写入以下代码
index.html
{{ title }} - Microblog
Hello, {{ user.username }}!
routes.py
from flask import render_template
from app import app
@app.route('/')
@app.route('/index')
def index():
user = {'username': 'Miguel'}
return render_template('index.html', title='Home', user=user)
在routes.py中用到了,render_template() 函数,作用是把函数中含有的参数替换成模板中的{{…}}
也就是在渲染的过程中用实际值来替换占位符
模板也支持在{%…%}块内使用控制语句,模板index.html的下一个版本添加一条if语句
{% if title %}
{{ title }} - Microblog
{% else %}
Welcome to Microblog!
{% endif %}
Hello, {{ user.username }}!
if语句的使用
{% if something %}
...
{% else %}
...
{% endif %}
在if语句中,必须有endif来进行结束,else可以没有
for语句的使用
{% for item in items %}
#输出或使用item,做一些操作
{% endfor %}
routes.py中视图函数index更新
from flask import render_template
from app import app
@app.route('/')
@app.route('/index')
def index():
user = {'username': 'Miguel'}
posts = [
{
'author': {'username': 'John'},
'body': 'Beautiful day in Portland!'
},
{
'author': {'username': 'Susan'},
'body': 'The Avengers movie was so cool!'
}
]
return render_template('index.html', title='Home', user=user, posts=posts)
index.html中使用for循环来更新posts中的值
{% if title %}
{{ title }} - Microblog
{% else %}
Welcome to Microblog
{% endif %}
Hi, {{ user.username }}!
{% for post in posts %}
{{ post.author.username }} says: {{ post.body }}
{% endfor %}
app/templates/base.html
{% if title %}
{{ title }} - Microblog
{% else %}
Welcome to Microblog
{% endif %}
Microblog: Home
{% block content %}{% endblock %}
block控制语句定义了派生模板可以插入代码的位置。block被赋予了一个唯一的名称,派生的模板可以在提供其内容时进行引用
简化后的index.html
{% extends "base.html" %}
{% block content %}
Hi, {{ user.username }}!
{% for post in posts %}
{{ post.author.username }} says: {{ post.body }}
{% endfor %}
{% endblock %}
使用extends语句建立了两个模板之间的关系,引用了base.html,block插入代码块,这样就可以不用重复的写代码了
此时的项目结构图
microblog\
templates/
index.html
base.html
venv\
app\
__init__.py
routes.py
microblog.py