Jinja2过滤器和控制语句怎么使用(jinja2,开发技术)

时间:2024-04-28 05:43:25 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

1.过滤器的使用

1.过滤器和测试器

在Python中,如果需要对某个变量进行处理,我们可以通过函数来实现。在模板中,我们则是通过过滤器来实现的。过滤器本质上也是函数,但是在模板中使用的方式是通过管道符号(|)来调用的。例如有个字符串类型变量name,想要获取他的长度,则可以通过 {name[length}}来获取,Jinja2会把name当做第一个参数传给length过滤器底层对应的函数。length是Jinja2内置好的过滤器,Jinja2中内置了许多好用过滤器,如果内置过滤器不满足需求,我们还可以自定义过滤器。我们先来学习下如何自定义过滤器,读者明白了过滤器的原理后,再去学习Jinja2内置过滤器就更能得心应手了。

2.过滤器

templates/filter.html
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>过滤器使用demo</title></head><body>{{user.username}}-{{user.username|length}}</body></html>
app.py
#render_template渲染模板fromflaskimportFlask,render_templateapp=Flask(__name__)classUser:def__init__(self,username,email):self.username=usernameself.email=email@app.route("/filter")deffilter_demo():user=User(username="小程xxx",email="xxx@qq.com")returnrender_template("filter.html",user=user)if__name__=='__main__':app.run()
效果

Jinja2过滤器和控制语句怎么使用

3.自定义过滤器

过滤器本质上是 Python的函数,他会把被过滤的值当做第一个参数传给这个函数,函数经过一些逻辑处理后,再返回新的值。在过滤器函数写好后,可以通过@app.template_ filter装饰器或者是app.add_template_filter函数来把函数注册成Jinja2能用的过滤器。这里我们以注册一个时间格式化的过滤器为例,来说明下自定义过滤器的方法。

app.py

#render_template渲染模板fromflaskimportFlask,render_templatefromdatetimeimportdatetimeapp=Flask(__name__)#strftime:根据区域设置格式化本地时间#format:格式化defdatetime_format(value,format="%Y年%m月%d日%H:%m"):returnvalue.strftime(format)app.add_template_filter(datetime_format,"dformat")classUser:def__init__(self,username,email):self.username=usernameself.email=email#filter:过滤器@app.route("/filter")deffilter_demo():user=User(username="小程xxx",email="xxx@qq.com")mytime=datetime.now()returnrender_template("filter.html",user=user,mytime=mytime)if__name__=='__main__':app.run()

上面我们定义了一个datetime_formt的函数,第一个参数是需要被处理的值,第二个参数是时间的格式,并且指定了一个默认值。然后下面通过app.add_template_filter,将datetime_format函数注册成了过滤器,并且这个过滤器的名字,叫做dformat。那么以后在模板文件中,就可以这样类似这样使用了:

templates/filter.html

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>过滤器使用demo</title></head><body><div>{{user.username}}-{{user.username|length}}</div><div>{{mytime|dformat}}</div></body></html>
效果

Jinja2过滤器和控制语句怎么使用

2.控制语句

1.if

app.py
#render_template渲染模板fromflaskimportFlask,render_templateapp=Flask(__name__)@app.route("/control")defcontrol_statement():age=17returnrender_template("control.html",age=age)if__name__=='__main__':app.run()
templates/control.html
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body>{%ifage>18%}<div>您已经满118岁,可以进入网吧!</div>{%elifage==18%}<div>您刚满18岁,需要父母陪同才能进入!</div>{%else%}<div>您未满18岁,不能进入网吧!</div>{%endif%}</body></html>

注:

  • 可以注意到if语句结束后,需要加一个endif来关闭if代码块。这个跟python是有点不同的。

  • Jinja2中的代码缩进只是为了更加方便阅读。任何缩进都不是必须的。

Jinja2过滤器和控制语句怎么使用

2.for

app.py

#render_template渲染模板fromflaskimportFlask,render_templateapp=Flask(__name__)@app.route("/control")defcontrol_statement():age=17books=[{"name":"三国演义","author":"罗贯中"},{"name":"水浒传","author":"施耐庵"}]returnrender_template("control.html",age=age,books=books)if__name__=='__main__':app.run()
templates/control.html
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body>{%forbookinbooks%}<div>图书名称:{{book.name}},图书作者:{{book.author}}</div>{%endfor%}</body></html>

Jinja2过滤器和控制语句怎么使用

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Jinja2过滤器和控制语句怎么使用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Flutter Component动画的显和隐怎么实现下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18