模板
模板
视图函数的作用很明确,即生成请求的响应。一般而言,请求会改变程序的状态,而这种变化也会在视图函数中产生。
例如,用户在网站中注册了一个新账户。用户在表单中输入电子邮件地址和密码,然后点击提交按钮 。(表现逻辑) 服务器收到包含用户输入数据的请求,然后Flask把请求分发到处理注册请求的视图函数。这个视图函数需要访问数据库,添加新用户,然后生成响应回送给浏览器。(业务逻辑)
把业务逻辑和表现逻辑混在一起会导致代码难以理解和维护,把表现逻辑移到模板能够提升程序的可维护性。
模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才知道。 使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。为了渲染模板,Flask使用了一个名为Jinja2的强大模板引擎
Jinja2模板引擎
Flask提供的render_temokate函数把Jinja2模板引擎集成到了程序中。render_template函数的第一个参数是模板的文件名。随后的参数都是键值对,表示模板中变量对应的真实值。
变量
{{...}}
Jinja2能识别所有类型变量,甚至是一些复杂的类型,例如字典,列表和对象。
可以使用过滤器修改变量,过滤器名添加在变量名之后,中间使用竖线分隔。例如,下述模板以首字母大写形式显示变量name的值:
Hello,{{name|capitalize}}
Jinja2部分常用过滤器
safe 渲染值时不转义
capitalize 首字母大写,其余小写
lower 全小写
upper 全大写
title 每个单词的首字母都转换成大写
trim 把值的首尾空格去掉
striptags 渲染之前把值中所有的HTML标签都删掉
控制结构
改变模板的渲染流程。
Jinja2还支持宏。宏类似于Python代码中的函数
需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板宏,以避免重复:
另一种重复使用代码的强大方式是模板继承,现新建一个名为base.html的基模板:
{ % block head % }block 标签定义的元素可在衍生模板中修改。
使用Flask-Bootstrap集成Twitter Bootstrap
Bootstrap 是Twitter开发的一个开源框架,它提供的用户界面,它提供的用户界面组件可用于创建整洁且具有吸引力的网页。
Bootstrap是客户端框架,因此不会直接涉及服务器。服务器需要做的只是提供引用了Bootstrap层叠样式表(CSS)和JavaScript文件的HTML响应,并在HTML,CSS和JavaScript代码中实例化所需组建。这些操作最理想的执行场所就是模板。
想要在程序中集成Bootstrap,显然要对模板做所有必要的改动。不过,更简单的方法是使用一个名为Flask-Bootstrap的Flask扩展,简化集成的过程。
初始化Flask-Bootstrap
#hello.py
from flask.ext.bootscript import Bootstrap
#...
bootstrap = Bootstrap(app)
Flask-Bootstrap中的基模板
{% extend "bootstrap/base.html"%}提供了一个网页框架,引入了Bootstrap中的所有CSS和JavaScript文件
基模板中定义了可在衍生模板中重定义的块。block和endblock指令定义的块中的内容可添加到基模板中。
Flask-Bootstrap基模板中定义的块
doc: 整个HTML文档
html_attribs 标签的属性
html 标签中的内容
head 标签中的内容
title

浙公网安备 33010602011771号