• Django之模板层


    1. 什么是DTL简介

    全称:Django模板语言(Django Template Language)
    语法:
        filter {{ }}  #变量和过滤
        tag {% %}      #标签

    2. 简单的变量的使用:

    '''
    1.视图函数可以通过两种方式将变量传递给模板页面
    
        -- render(request, 'test_page.html', locals())
            >>> locals() 就是将视图函数中的所有变量都传递给模板页面
    
    2.模板页面中对变量的使用
        -- 语法:{{ 变量 }}
        -- 支持("全")类型:数字、字符串、布尔、列表、元组、字典、函数、对象、类
        -- 注:list.0 | dic.key | obj.name | obj.fn 来查看内部成员数据
    def dtl(request):
        num = 3.14
        ss = 'abc123嘿嘿'
        # return render(request, 'django_dtl.html', {'number': num, 'ss': ss})
        result = True
        list = [1, 2, 3, 4, 5]
        dic = {'name': 'owen', 'age': 28}
        # 函数不能带有参数,模板中{{ fn }} 本质就是调用函数拿到函数值(函数的返回值)
        def fn():
            return "fn function"
        class Person:
            name = "name"
            def __str__(self):
                return "这是Person类"
        p = Person()
        # locals()存放当前作用域中所有的名字
        return render(request, 'django_dtl.html', locals())
    '''
    '''
    <li>{{ num }}</li>
    <li>{{ list }} -- {{ list.0 }}</li>
    <li>{{ dic }} -- {{ dic.age }}</li>
    <li>{{ Person }}</li>  # Person() => __str__的返回值
    <li>{{ 123 }}</li>  # 也可以直接写数字、字符串、布尔值
    '''
    变量的使用
    '''
    1.语法:
        -- {{ 变量|过滤器1[[:参数]|...|过滤器n[:参数]] }}
        -- 注:过滤器可以串联操作,可以拥有0个或1个参数
    
    2.常见内置filter
        -- 增加   add:num
        -- 字符串长度   length
        -- 默认值   default:'默认值'  # 变量不存在或为空
        -- 全大写   upper
        -- 全小写   lower
        -- 切片   slice:'0:-1'
        -- 将数字转换为文件大小   filesizeformat
        -- 字符串隐藏   truncatechars:13   # 只显示10个字符,后置字符都用...来替代
        -- 时间   date:'Y-m-d'
        -- 转换原意   safe
    '''
    
    <hr>
    <h2>过滤器</h2>
    <ul>
        <li>{{ num|add:1 }}</li>
        <li>{{ ss|length }}</li>
        <li>{{ 150|add:100|add:-50 }}</li>
        <li>{{ 'Abc'|upper|lower }}</li>
        <li>{{ '123456789'|truncatechars:6 }}</li>
        <li>{{ '123456789'|slice:'1:-1' }}</li>
        <li>{{ number|default:"number不存在或值为False" }}</li>
        <li>{{ time|date:'Y年m月d日 h:i:s' }}</li>
        <li>{{ time|safe }}</li>
        <li>{{ link|safe }}</li>
        <li>{{ file_size|filesizeformat }}</li>
    </ul>
    <hr>
    过滤器

    3.标签的用法

    '''
    1.语法:
        -- {% 关键词 arg1 ... argn %}  eg: {% url 'test' 1 2 3 %} => /test/1/2/3/
    
    2.常用:
        -- 反向解析url   {% url 'namespace:url_name' arg1 arg2 %}
        -- 当前时间now   {% now 'Y-m-d' %}
        -- 起别名with   {% with '后面的别名flag就代表我' as flag %} {{ flag }} {% endwith %}
        -- Django CSRF认证   {% csrf_token %}
    '''
    
    <h3>标签</h3>
    <ul>
        <li>{% url 'test' 1 2 3 %}</li>
        <li>
            {# 起别名 #}
            {% with link|safe as lk %}
                {{ lk }}
                {{ lk }}
                {{ lk }}
            {% endwith %}
            {% with n='123456789' %}
                {{ n }}
                {{ n }}
                {{ n }}
            {% endwith %}
        </li>
        <li>
            {% now 'Y-m-d' %}
        </li>
        <li>
    标签的定义

    4. 分支的用法

    语法:
    {% if 条件1 %}
        结论1
    {% elif 条件2 %}
        结论2
    {% else %}
        结论n
    {% endif %}
    
    注:
    1. if的条件可以添加filter
    2. 可以嵌套
    
    <li>
            {% with 10|add:0 as num %}
            
                {% if num|add:0 > 10 %}
                    <p>num值大于10</p>
                {% elif num|add:0 == 10 %}
                    <p>num值等于10</p>
                {% else %}
                    {% if num|add:0 > 5 %}
                        <p>num介于5与10</p>
    
                    {% else %}
                        <p>num不大于5</p>
                    {% endif %}
                {% endif %}
                
            {% endwith %}
        </li>
    分支的用法

    5.迭代器的前端用法

    '''
    {% for foo in iterate %}
        {{ forloop }}
    {% empty %}
        可迭代对象为空
    {% endfor %}
    
    注:
    1. iterate为可迭代对象
    2. iterate可以添加filter
    3. forloop变量为存放迭代信息的字典,父级forloop字典,开始索引从0编号或1编号,倒序索引从0编号或1编号,是否是第一次或最后一次循环
    4. empty分支会在可迭代对象不存在或空时执行
    '''
    
    <li>
            {% for n in 31425|make_list %}
                <p>{{ forloop }}</p>
                <p>第{{ forloop.counter }}次迭代</p>
                <p>{{ n }}</p>
                <hr>
            {% endfor %}
        </li>
        <li>
            {% for l in ll %}
    {#            <p>{{ foo }}</p>#}
    {#            <hr>#}
    {#            <p>外层第{{ forloop.counter }}循环</p>#}
                {% for n in l %}
    {#                <p>内层第{{ forloop.counter }}循环</p>#}
                    <p>外层{{ forloop.parentloop.counter }} - 内层{{ forloop.counter }}</p>
                    {{ n }}
                    <hr>
                {% endfor %}
    
            {% empty %}
                <p>迭代的ll不存在或为空</p>
            {% endfor %}
    
        </li>
    </ul>
    View Code
  • 相关阅读:
    spring filter and interceptor
    spring 与 swagger 2 的整合
    spring 异步操作
    图片延迟加载 jquery,lazyload.js 调用的demo
    一、Spring的第一个课时
    线程的基本了解
    HTTPS/HTTP监听常见问题
    Leetcode 118 杨辉三角
    HashSet的源码解释
    HashMap源码理解
  • 原文地址:https://www.cnblogs.com/gukai/p/10771193.html
Copyright © 2020-2023  润新知