第五篇:flask基础五讲--Jinja2模板引擎

要想开发出易于维护的应用,关键在于编写形式简洁且结构良好的代码。目前为止,你看到的示例都太简单,无法说明这一点,但Flask视图函数的两个完金独立的作用却被融合在了一起,这就产生了一个问题。
视图函数的作用很明确,即生成请求的响应。对最简单的请况来说,这就足够了,但很多情况下,请求会改变应用的状态,而这种变化就发生在视图函数中。
以用户在网站中注册新账户的过程为例。用户在表单中输电子邮件地址和密码,然后点击提交按钮。服务器接收到包含用户输入数据的请求,然后Flask把请求分派给处理注册请求的视图函数。这个视图函数需要访问数据库,添加新用户,然后生成响应回送浏览器,指明操作成功还是失败。这两个过程分别称为业务逻辑表现逻辑
把业务逻辑和表现逻辑混在一起会导致代码难以理解和维护。假设要为一个大型表格构建HTML代码,表格中的数据由数据库中读取的数据以及必要的HTML字符串连接在一起。把表现逻辑移到模板中能提升应用的可维护性。
模板是包含响应文本的文件, 中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染为了渲染模板, Flask使用一个名为Jinja2的强大模找引擎。
1:默认情况下,Flask在应用目录中templates子目录中寻找模板。
2:flask 提供了render_template()函数把模板引擎集成到了这个应用中,这个函数第一个参数是模板名,第二个是键值对变量的具体值
3:变量{{ name }}:这个结构表示一个变量,这是一种特殊的占位符。告诉模板引擎这个位置的值从渲染模板时使用的数据中获取
4:能识别所有种类 类型的变量,甚至时一些复杂的类型,例如列表字典和对象
5:变量的值可以用过滤器来修改,把过滤器添加在变量名之后,二者以竖线分隔,例如把name变量的值首字母变成大写。{{ name|capitalize }}
jinja2过滤器:
safe 渲染时不转义
capitalize 首字母变大写 其余的变小写
lower 把值转换成小写形式
upper 把值转化成大写形式
title 每个单词首字母大写
trim 值的首尾空格删掉
striptags 渲染之前把值中所有html标签都删掉
完整的过滤器列表在jinja2 文档(http://jinja.pocoo.org/docs/2.10/templates/#builtin-filters)
6:控制结构:
第一种:判断语句:

{% if user %}
	{{ user }}
{% else %}
	helloe
{% endif %}

第二种:循环语句

<table>
	{% for i in coments %}
		<tr><td>{{ i }}</td></tr>
	{% else %}
		<tr><td>none</td></tr>
	{% endfor %}
</table>

第三种:宏:类似python中的函数

#类似函数部分

{% macro render_coment(a) %}
	<li>{{ a }}</li>
{% endmacro %}

#调用部分

<ul>
	{% for i in conments %}
		{{ render_coment(i)}}
	{%endfor%}
</ul>

为了重复使用宏,可以把他保存在单独文件中,然后在需要使用的模板中导入:

{% import “m.html” as  a %}
<ul>
	{% for i in conments %}
		{{ a.render_coment(i)}}
	{%endfor%}
</ul>

第四种:相同代码在不懂模板中时,将相同代码片段写入单独的文件,在引入到需要的模板:{% include “a.html” %}
第五种:继承模板:
基模板:

<html>
	<head>
		{% block head %]
		<title>{% block title %}{% endblock %} - My Applicatians</title>
		{% endblock %> 
	</head>
	<body>
		{% block body %}
		{% endblock %}
	</body>
	</html>

基模板中定义的区块 可以在衍生模块中覆盖,jinja2 使用block 和endblock指令在基模板中定义内容区块
衍生模板:

{% extends "base.html" %} extends指令声明这个模板衍生自base.html
{% block title %}Index{% endblock %}
 {% block head %}
 	{{ super() }}
 	<style>
 	s/style> 
 {% endblock %}
 {% block body %}
 <h1>Hello, World! </h1>
 {% endblock %}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值