05 深入模板

Django模板语言是Django内置的模板语言,Jinjia2是当前Python最流行的模板语言。
5-1 变量与标签
# 变量以{{ variable }}表示,variable是变量名,变量的类型可以是Python支持的数据类型,使用方法如下:
# 从下面的例子可以看出,模板的变量需要和标签相互结合使用
# 模板的标签就如Python里面的函数和方法
    <ul id="cate_box" class="lf">
        {% for type in type_list %}    #是for遍历标签,将变量进行遍历输出
        <li>
            <h3><a href="#">{{ type.type }}</a></h3> #代表变量type_list的某个属性
            <p>
                {% for name in name_list %}
                    {% if name.type == type.type %} #是if判断标签,主要对变量进行判断处理
                        <span>{{ name.name }}</span>
                    {% endif %}
                {% endfor %}
            </p>
        </li>
        {% endfor %}
    </ul>
# Django常用内置标签
    # {% for %}              遍历输出变量的内容,变量类型应为列表或数据对象
        {% for item in myList %}
            {{ item }}
        {% endfor %}
    # {% if %}                对变量进行条件判断
    # {% csrf_token %}        生成csrf_token的标签,用于防护跨站请求伪造攻击
    # {% url %}                引用路由配置的地址,生成相应的URL地址
    # {% with %}            将变量名重新命名
        {% with total=products_total %}
            {{ total }}
        {% endwith %}
    # {% load %}            加载导入Django的标签库
    # {% static %}            读取静态资源的文件内容
    # {% extends xxx %}        模板继承,xxx为模板文件名,使当前模板继承xxx模板
    # {% block xxx %}        重写父类模板的代码
# for标签模板变量说明
    # forloop.counter        获取当前循环的索引,从1开始计算
    # forloop.counter()        获取当前循环的索引,从0开始计算
    # forloop.recounter        索引从最大数开始递减,直到索引到1的位置
    # forloop.recounter()    索引从最大数开始递减,直到索引到0的位置
    # forloop.first            当遍历的元素为第一项时为真
    # forloop.last            当遍历的元素为最后一项时为真
    # forloop.parentloop    在嵌套的for 循环中,获取上层for循环的forloop
# 通过简单的例子来进一步了解forloop的使用:
    {% for name in name_list %}
    {% if forloop.counter == 1%}
        <span>这是第一次循环</span>
    {%elif forloop.last %}
        <span>这是最后一次循环</span>
    {% else %}
        <span>本次循环次数为:{{forloop.conter}}</span>
    {% endif %}
    {% endfor %}
    
5-2 模板继承
# 步骤1:在模板index.html中使用{% extends "base.html" %}来继承模板base.html的代码
# 步骤2:由标签{% block body %}在继承模板的基础上实现自定义模板的内容
# 步骤3:由{% endblock %}结束block标签

5-3 自定义过滤器
# 过滤器主要是对变量的内容进行处理,如替换、反序和转义等
# variable代替模板变量,管道符号“|”代表变量使用过滤器,filter代表某个过滤器,变量可以支持多个过滤器同时使用:
    {{ variable | filter | lower }}
# 在使用的过程中,有些过滤器还可以传入参数,但仅支持一个参数的传入:
    {{ variable | date:"D d M Y" }}
# 表5-3 Django的内置过滤器
    # add            {{ value|Add:"2" }}将value的值增加2
    # date            {{ value|date:"D d M Y" }}将日期格式数据按照给定的格式输出
    # first            {{ value|first }}返回列表中的第一个Item
    # last            {{ value|last }}返回列表中的最后一个Item
    # length        {{ value|length }}返回value的长度
# 在实际开发中,如果内置过滤器的功能不太适合实际开发需求,我们可以通过总定义过滤器来解决问题。
    from django import template
    # 注册过滤器
    register = template.Library()
    # 声明并定义过滤器
    @register.filter
    def myreplace(value, agrs):
        oldValue = agrs.split(':')[0]
        newValue = agrs.split(':')[1]
        return value.replace(oldValue, newValue)
# 最后在HTML模板中使用我们自定义的过滤器,以index.html模板的title为例:
    # 用于导入templatetags文件夹的myfilter.py文件中所定义的功能,用来告诉django在哪个地方可以找到自定义过滤器
    {% load myfilter %}
    <head>
        把变量title含有"首页"的内容替换成"我的首页"
        <title>{{ title|myreplace:'首页:我的首页' }}</title>
        <meta charset="utf-8">
        {% load staticfiles %}
    </head>

 

上一篇:Template 模板


下一篇:springboot 通过@WebFilter(urlPatterns )配置Filter过滤路径