Jinja在进行模板渲染的过程中,很多情况下会涉及到调用后台Python代码的情况。作为功能强大的Python 引擎自然能轻松的解决这个问题。
Jinja本身自带了很多内置的过滤器,可以直接拿来使用。例如:safe、format、escape等。而他的强大之处就是可以在后台定义新的过滤器,而在模板中直接去使用。
例如:我要把一个查询出来的后台ID作为html页面访问的参数,但是我又不想直接将ID直接暴露给浏览器连接中。所以我想把这个ID进行加密编码后渲染出来。这样,我们就可以在后台定义一个过滤器:
@app.template_filter("encryptUrlParam")
def encryptUrlParam(ps:str):
return StaticFuncs.encryptUrlParam(ps)StaticFuncs.encryptUrlParam(ps)静态函数将传入的ps参数转换为加密后的Url参数。在模板中渲染时可直接使用“encryptUrlParam”过滤器。例如:
{% if pages %}
<div class="page-bar">
<ul class="page-bar-content">
{% for pageIdx in pages %}
<li class="page-bar-item">
{% if articleResult.Page==pageIdx %}
<label>{{ pageIdx }}</label>
{% else %}
<a href="{{url_for('label_list',label=label|urlencode,page=pageIdx|encryptUrlParam)}}">{{ pageIdx }}</a>
{% endif %}
</li>
{% endfor %}
</ul>
</div>
{% endif %}其中“page=pageIdx|encryptUrlParam”便是将pageIdx通过过滤器encryptUrlParam进行加密后的链接。