• Django的模板语言


    一、语法

    1、变量

    2、逻辑相关

    2.1、if判断

    {% if a > b %}
    {% endif %}
    
    {% if a > b %}
    {% else %}
    {% endif %}
    
    {% if a > b %}
    {% elif %}
    {% else %}
    {% endif %}

    2.2、for循环

    2.2.1、for循环基本用法

    {% for i in name_list %}
        {{ i }}
    {% endfor %}
    
    {% for i in name_list %}
        {{ i }}
    {% empty %}
        空空如也
    {% endfor %}

     2.2.2、for循环可用的属性

    forloop.counter
    forloop.counter0
    forloop.revcounter
    forloop.revcounter0
    
    forloop.first 
    forloop.last 
    
    forloop.parentloop  --> 两层for循环,内层循环引用外层循环

    二、filter

    1、内置的filter

    1. length
    2. filesizeformat       --> 格式化文件大小的
    3. date:'Y-m-d H:i:s'   --> 格式化时间的
    4. slice
    5. safe                 --> XSS攻击(跨站脚本攻击)
    6. truncatechars:20     --> 截取字符,超过的用...表示
    7. default

    2、自定义的filter

      具体的实现方式:
            1. 定义阶段
                1. 在app下面新建一个python的包:templatetags
                2. 在上面的Python包中新建一个Python文件,名字随意
                3. 在上述python文件中:
                    from django import template
                    
                    # 生成一个注册用的实例
                    register = template.Library()
                    # 定义并注册一个自定义的filter函数
                    @register.filter(name='addsb')
                    def add_sb(arg):
                        return "{} sb".format(arg)
            2. 调用阶段:
                1. 在Django的模板文件中,导入刚才新建的python文件
                    {% load py文件名 %}
                2. 按照filter的语法调用
                    {{ name|addsb }}

    三、母版与继承

    1、为什么要有模板和继承

      把多个页面公用的部分提取出来,放在一个 母版 里面。

      其他的页面只需要 继承 母版就可以了。

    2、具体使用的步骤

      1. 把公用的HTML部分提取出来,放到base.html文件中
      2. 在base.html中,通过定义block,把每个页面不同的部分区分出来
      3. 在具体的页面中,先继承母版
      4. 然后block名去指定替换母版中相应的位置

    3、用母版和继承的注意事项

      1. {% extends 'base.html' %} --> 母版文件:base.html要加引号
      2. {% extends 'base.html' %}必须放在子页面的第一行!!!
      3. 可以在base.html中定义很多block,通常我们会额外定义page-css和page-js两个块
      4. view.py相应的函数中返回的是对应的子页面文件 不是不是不是 base.html

    四、组件

    1. 什么时候用组件?
        重复的代码,包装成一个独立的小html文件。
    2. 如何使用?
        {% include 'nav.html' %}

    五、静态文件的灵活写法

      1.
          {% load static %}
          {% static 'jQuery-3.3.1.js' %}
      2. {% get_static_prefix %}jQuery-3.3.1.js

    1. 利用Django模板语言内置的static方法帮我拼接静态文件的路径
        {% load static %}
        <link href="{% static 'bootstrap/css/bootstrap.min.css' %}" rel="stylesheet">
    2. 利用内置的get_static_prefix获取静态文件路径的别名,我们自行拼接路径
        {% load static %}
        <link href="{% get_static_prefix %}bootstrap/css/bootstrap.min.css" rel=stylesheet>
    3. as语法(一个路径多次用到,可以使用as保存到一个变量,后面就直接使用变量代替具体路径)

    六、自定义simple_tag和

      比filter高级一点点
      它可以接受的参数个数大于2

    七、inclusion_tag

     用来返回一段html代码(示例:返回ul标签)

    1. 定义阶段
        在app下面新建templatetags 文件夹(注意是Python包)
        新建一个py文件
        
        from django import template
        # 生成注册示例,名字必须是register
        register = template.Library()
        @register.inclusion_tag("ul.html")
        def show_ul(num):
            num = 1 if num < 1 else int(num)
            data = ["第{:0>3}号技师".format(i) for i in range(1, num+1)]
            return {"data": data}

    2. 调用阶段
        {% load xx %}
        {% show_ul 10 %}

  • 相关阅读:
    innerHTML和innerText
    Function 构造器及其对象、方法
    构造函数
    jquery 获取及设置input各种类型的值
    在浏览器中输入URL并回车后都发生了什么?
    :after和:before的作用及使用方法
    使用JS监听键盘按下事件(keydown event)
    Javascript模块化编程(三):require.js的用法
    Javascript模块化编程(二):AMD规范
    Javascript模块化编程(一):模块的写法
  • 原文地址:https://www.cnblogs.com/bad-robot/p/9743338.html
Copyright © 2020-2023  润新知