<html> <head> <title>{{ title }} - Microblog</title> </head> <body> <h1>Hello,{{ user.username }}!</h1> </body> </html> 这是一个标准的、简单的HTML页面,其中{{...}}花括号,在这儿代表的是个占位符,作用是将表达式打印到模板进行输出。这些占位符表示HTML中可变的部分,并且只有在运行时才知道。接着我们对视图函数index()进行编辑,修改routes.py文件如下: app/routes.py:使用render_template()函数 from app import app from flask import render_template#从flask包中导入render_template函数 @app.route('/') @app.route('/index') def index(): user = {'username':'Miguel'} return render_template('index.html', title='Home', user=user) 为了渲染模板,由从Flask包中导入的render_template()完成,此函数中的参数为模板文件名(index.html)、模板参数的变量列表,并返回相同的模板,不过其中的占有符都替换为实际值。 {% if title %} ...语句块 {% else %} ...语句块 {% endif %} for循环 {% for post in posts %} ...语句块 {% endfor %} {% extends "base.html" %} {% block content %} ... {% endblock %} Jinja2具有模板继承功能,完美解决上述问题。在实际操作中,将所有模板共有的页面布局部分移至基础模板中,其他模板则继承自它。实例如下,在app/templates目录下创建一个基础模板文件base.html。 <html> <head> {% if title %} <title>{{ title }} - Microblog</title> {% else %} <title>Welcome to Microblog</title> {% endif %} </head> <body> <div>Microblog:<a href="/index">Home</a></div> <hr> {% block content %} {% endblock %} </body> </html> 在上述基础模板中,块block 控制语句用于定义派生模板可自行插入的位置。块block 被赋予唯一的名字 content,派生模板在提供其内容时可引用这个名称。 修改index.html这个模板,让其继承base.html模板。app/templates/index.html:从基础模板继承 {% extends "base.html" %} {% block content %} <h1>Hello,{{ user.username }}!</h1> {% for post in posts %} <div><p>{{ post.author.username }} says: <b>{{ post.body }}</b></p></div> {% endfor %} {% endblock %} base.html基础模板 实现处理常规页面的结构,则派生模板index.html简化大部分内容。 extends语句 建立了两个模板之间的继承关系,因此,Jinja2就会知道:当它被要求渲染 |
|