flask的模板引擎Jinja2介绍1

什么是模板

模板在web开发中基本上是标配。
模板主要是做展示用。具体来讲,模板有两个作用:
1.处理业务逻辑
2.返回响应内容。
在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本。因此需要模板来解耦。

什么是Jinja2

Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,其是Flask内置的模板语言。
模板语言:是一种被设计来自动生成文档的简单文本格式,在模板语言中,一般都会把一些变量传给模板,替换模板的特定位置上预先定义好的占位变量名。

语法

1、变量

  1. 用{{}} 来表示变量名,这种 {{}} 语法叫做变量代码块
  2. 用 {%%} 定义的控制代码块,可以实现一些语言层次的功能,
    比如循环或者if语句

举例:

  1. 在模板中使用变量,当然变量要实现传给模板。
<h1 class="title-center">{{article.title}}</h1>
  1. 如何传值呢?
if articles : # 如果存在,遍历数据
	return render_template('articles.html', articles=articles) # 渲染模板

Flask提供的 render_template 函数封装了该模板引擎
render_template 函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值。

Jinja2 模版中的变量代码块可以是任意 Python 类型或者对象,只要它能够被 Python 的 str() 方法转换为一个字符串就可以,比如,可以通过下面的方式显示一个字典或者列表中的某个元素:

{{dict['key']}}
{{list[0]}}

2、逻辑控制

用 {%%} 定义的控制代码块,可以实现一些语言层次的功能,比如循环或者if语句 。在模板中是用太多的逻辑处理,本身是不够优雅的。但有时候是必须处理一些展示的逻辑。

如:在页面上要判断是否登录,如果没有登录,则显示:注册和登录

{% if session.logged_in == NULL %}
<a href="/register" class="btn btn-primary btn-lg">注册</a>
<a href="/login" class="btn btn-success btn-lg">登录</a>
{% endif %}

还有在列表页面经常用到的循环:

{% for article in articles %}
<article class="post-preview">
  <h1 class="post-title">{{article.title}}</h1>
  <p class="post-author">作者:{{article.author}} &nbsp {{article.create_date}} </p>
  <p>{{article.content | safe | truncate(200, True)}}</p>
  <div class="clearfix">
  <a class="btn btn-primary float-right" href="article/{{article.id}}">查看全文 →</a>
  </div>
</article>
<hr class="underline">
{% endfor %}

3.注释

使用 {# #} 进行注释,注释的内容不会在html中被渲染出来

{# {{ message}} #}

4.过滤器

过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示样式,包括格式化、运算等,而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器。
过滤器怎么用呢?如下:

{{ “hello world” | reverse | upper }}

神奇的符号:|
链式调用,玩过linux服务器的应该比较熟悉:
ps -ef |grep xxx
这里也是一样的玩法
“hello world” 这个是字符串,是数据源头
| reverse | upper 分别对源头数据进行处理。

常见内建过滤器
1.常见的字符串操作的内建过滤器如下:

safe:禁用转义

{{ 'hello' | safe }}

capitalize:把变量值的首字母转成大写,其余字母转小写

{{ 'hello' | capitalize }}

lower:把值转成小写

{{ 'HELLO' | lower }}

upper:把值转成大写

{{ 'hello' | upper }}

title:把值中的每个单词的首字母都转成大写

{{ 'hello' | title }}

reverse:字符串反转

{{ 'olleh' | reverse }}

format:格式化输出

{{ '%s is %d' | format('name',17) }}

striptags:渲染之前把值中所有的HTML标签都删掉

{{ 'hello' | striptags }}

truncate: 字符串截断

{{ 'hello every one' | truncate(9)}}

2.常见的内建的列表操作过滤器

first:取第一个元素

{{ [1,2,3,4,5,6] | first }}

last:取最后一个元素

{{ [1,2,3,4,5,6] | last }}

length:获取列表长度

{{ [1,2,3,4,5,6] | length }}

sum:列表求和

{{ [1,2,3,4,5,6] | sum }}

sort:列表排序

{{ [6,2,3,1,5,4] | sort }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值