flask(2):jinja模板

在之前的helloworld中,访问根目录,我们返回了一个<h1>标签。当我们想要在界面上展示更多东西的时候,用return直接返回未免让代码太过繁杂难以维护。

flask用模板解决此类场景。

模板是一个包含响应文件的文件,其中包括用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。

为了渲染模板,flask使用了一种名为jinja2的强大模板引擎。

1:渲染模板

实际开发中,一般会将html文件都保存到工程下的templates目录中。示例:index.html

在视图函数中,用render_template,渲染index.html,并传入参数。

render_template函数集成jinja2引擎,第一个参数是模板的文件名,随后的参数都是键值对。

比如,name=name,左侧是形参,与模板中保持一致,右侧是index函数接收的具体值

2:变量

{{ name }}表示一个变量。这是一种特殊的占位符,它告诉模板引擎这个位置的值要从渲染模板时使用的数据中获取。

jinja模板能够识别很多类型的变量甚至复杂类型的变量

在视图函数中定义相关变量及类(类必须实例化),然后渲染

然后在浏览器中查看效果

jinja模板支持用过滤器修改变量 ,过滤器名添加在变量名之后,中间用竖线分割,例如

常用过滤器如下:

过滤器名 说明
safe 渲染值时不转义
capitalize 把值的首字母转换成大写,其他字母转换成小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 把值中每个单词的首字母都转换成大写
trim 把值的首尾空格去掉
striptags 渲染之前把值中所有的HTML标签都删掉

在默认情况下,jinja会转义所有变量。当变量值中包含html标签,并且需要显示时,可以使用safe过滤器

3:控制语句

jinja2提供了多种控制结构,可用来改变模板的渲染流程。

1>条件控制

{% if  XXX %}

         ……

{% else %}

        ……

{% endif %}

实例:

不再传递user参数:

2>循环

{% for XXX in XXX%}

       ……

{% endfor %}

实例:

视图函数及运行结果

4:宏

jinja2支持宏。(宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是字符串)。这种替换在预编译时进行,称作宏展开。)

定义宏:

使用宏:

为了重复使用宏,还可以将宏,可以将其单独保存到一份文件中,然后在需要使用的模板中导入:

5:基模板

不仅宏需要重复使用,界面显示也有很多内容是需要重复的。可以用基模板来完成。

模板继承类似于Python中的类继承,

我们可以自己定义一个基模板,将重复部分都写入基模板中,其他模板只需继承即可。

假如,搜索框需要重复使用:

在某模板继承了此基模板后,搜索框部分无需再重复写代码,只需填入title和content的内容即可:

结果展示:

6:flask_Bootstrap

前端开发中有个很强大的框架叫bootstrap。flask对此同样有集成。

安装:pip install flask-bootstrap

导入:from flask_bootstrap import Bootstrap

实例化:bootstrap=Bootstrap(app)

实例化之后,我们得到了一个bootstrap的基模板。类似这样:

我们可以直接继承bootstrap下的base.html,也可以自己写base.html,其中继承bootstrap,然后再将其作为自己的基模板。

继承bootstrap提供的基模板的好处在于,其中提供了网页框架,引入了boostrap中所有的CSS和JavaScript。

PS:若模板继承时,要对已有内容的模块增加新内容,必须使用super()函数。

{{ super() }}

猜你喜欢

转载自blog.csdn.net/Daisy_zye/article/details/83590282