Jinja2模板(2)--变量和控制结构

本文详细介绍了Jinja2模板中的变量使用,包括如何通过{{name}}表达式引用变量及使用capitalize等过滤器改变变量的显示形式。同时,探讨了Jinja2的控制结构,如for循环、宏的使用,以及模板继承的概念,其中宏可保存在单独文件中供复用,模板继承允许在衍生模板中修改基模板的block内容。

变量

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

Jinja2能识别所有类型的变量。

可以使用过滤器修改变量:过滤器名添加在变量名之后,中间使用竖线分隔开,如,下面的模板以首字母大写形式显示变量name的值:

   Hello, {{name | capitalize}}

Jinja2常用的过滤器

1.safe:渲染值时不转义(需要显示变量中存储的HTML代码时候,可以使用safe过滤器,注:在不可信的值上不要使用此过滤器)

2.capitalize:把值的首字母转换成大写,其他字母转换成小写

3.lower:把值转换成小写形式

4.upper:把值转换成大写形式

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

6.trim:把值的首尾空格去掉

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

控制结构

1.条件控制语句
{% if user %}
    Hello, {{ user }}!
{% else %}
    Hello, Stranger!
{% endif %}

2.for循环渲染一组元素

<ul>
    {% for comment in comments %}
        <li>{{ comment }}</li>
    {% endfor %}
</ul>

3.还支持宏,类似于Python代码中的函数

{% macro render_comment(comment) %}
    <li>{{ comment }}</li>
{% endmacro %}

<ul>
    {% for comment in commets %}
        {{ render_comment(comment) }}
    {% endfor %}
</ul>


4.若要重复使用宏,可将其保存在单独的文件中,然后在需要使用的模板中导入

{% import 'macros.html' as macros %}
<ul>
    {% for comment in comments %}
        {{ macros.render_comment(comment) }}
    {% endfor %}
</ul>

5.模板继承

首先,创建一个名为base.html的基模板

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

block标签定义的元素可以在衍生模板中修改。下例为基模板的衍生模板:

{% extends "base.html" %}
{% block title %} Index {% endblock %}
{% block head %}
    {{ super() }}
    <style>
    </style>
{% endblock %}
{% block body %}
<h1>Hello World!</h1>
{% endblock %}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值