zoukankan      html  css  js  c++  java
  • python的Django模板系统(由于Django的强大需要定时更新)

    1.常用语法

    只需要记两种特殊符号:

    {{  }}和 {% %}

    变量相关的用{{}},逻辑相关的用{%%}。

    在Django的模板语言中按此语法使用:{{ 变量名 }}。

    当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身。 变量的命名包括任何字母数字以及下划线 ("_")的组合。 变量名称中不能有空格或标点符号。

    点(.)在模板语言中有特殊的含义。当模版系统遇到点("."),它将以这样的顺序查询:

    字典查询(Dictionary lookup)
    属性或方法查询(Attribute or method lookup)
    数字索引查询(Numeric index lookup)

    注意事项:

    1. 如果计算结果的值是可调用的,它将被无参数的调用。 调用的结果将成为模版的值。
    2. 如果使用的变量不存在, 模版系统将插入 string_if_invalid 选项的值, 它被默认设置为'' (空字符串) 。

    几个例子:

    在Django中一个app中的views的代码如下:

    from django.shortcuts import render, redirect, HttpResponse
    
    # Create your views here.
    
    
    def test_filter(request):
        # 定义一个str类型的测试类型
        a_str = '测试数据'
        # 定义一个list类型的测试类型
        a_list = ['test1', 'test2', 'test3']
        # 定义一个字典类型的测试类型 
        a_dict = {'test_1': 1, 'test_2': 2, 'test_3': 3}
        # 定义一个Boolean类型的测试类型
        a_true = False
        # 返回到html数据
        return render(request, 'test_django/test.html', {'a_str': a_str, 'a_list': a_list, 'a_dict': a_dict, 'a_true': a_true})

    现在就看看template中的编写了:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>my_test</title>
    </head>
    <body>
    <p>传递一个字符串类型:{{ a_str }}</p>
    <hr>
    <p>传递一个列表过来了:{{ a_list }}</p>
    
    <hr>
    <p>取出a_list中第二值:{{ a_list.1 }}</p>
    <hr>
    <p>传递一个字典过来了:{{ a_dict }}</p>
    <hr>
    <p>取出a_dict中key为test_2的值:{{ a_dict.test_2 }}</p>
    <hr>
    <p>当传递的值为False或者True或None是传递一个默认的值:{{ a_true|default:'这是空的值' }}</p>
    <hr>
    <h1>这是for的使用</h1>
      <ul>
    {% for i in a_list %}
            <li> {{ i }}</li>
    {% endfor %}<hr>
    </body>
    </html>

    运行效果如图。这里就不讲Django代码的url的处理方面的了:

     这里说到了一个for的使用,当你传递的是一个可迭代对象要单独一个个显示时即可使用for进行了:

    这里的for需要使用

    {% for i in list %}开始

    {{ i }}这里写迭代出来的对象

    {% endfor %}结束

    除了for 还有if 之类的语句这里也暂不详解了

    上面说了如何使用一些基本的模板语法,下面在讲一下filter(过滤器)

    在Django的模板语言中,通过使用 过滤器 来改变变量的显示。

    过滤器的语法: {{ value|filter_name:参数 }}

    使用管道符"|"来应用过滤器。

    例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。lower在这里的作用是将文本全都变成小写。

    注意事项:

    1. 过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。
    2. 过滤器可以接受参数,例如:{{ var|truncatewords:30 }},这将显示var的前30个词。
    3. 过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:', ' }}
    4. '|'左右没有空格没有空格没有空格

    Django的模板语言中提供了大约六十个内置过滤器。(这里也不详解先。)

    除了内置的过滤器,Django还支持自定义自己需要的filter

    还是刚刚那个app的目录下,在目录下创建一个templatetags(名字只能是这一个。) 的python文件夹,在文件里面创建一个my_filter.py文件在里面编写:

    # -*- coding: utf-8 -*-
    # @Time    : 2018/11/2 14:37
    # @Author  : lh
    # @Email   : 
    # @File    : my_filter.py
    # @Software: PyCharm
    
    from django import template
    register = template.Library()
    
    
    @register.filter(name='oh')
    def oh_shit(arg):
        return '{} 这是自定义的filter'.format(arg)
    
    
    @register.filter(name='oh_no')
    def oh_shits(arg, arg2):
        return '{}-----{}'.format(arg, arg2)
    

    然后还是视图层显示了:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>my_test</title>
    </head>
    <body>
    <p>传递一个字符串类型:{{ a_str }}</p>
    <hr>
    <p>传递一个列表过来了:{{ a_list }}</p>
    
    <hr>
    <p>取出a_list中第二值:{{ a_list.1 }}</p>
    <hr>
    <p>传递一个字典过来了:{{ a_dict }}</p>
    <hr>
    <p>取出a_dict中key为test_2的值:{{ a_dict.test_2 }}</p>
    <hr>
    <p>当传递的值为False或者True或None是传递一个默认的值:{{ a_true|default:'这是空的值' }}</p>
    <hr>
    <h1>这是for的使用</h1>
    <ul>
        {% for i in a_list %}
            <li> {{ i }}</li>
        {% endfor %}
        <hr>
        <h1>这是for下面自定义filter的使用基础版</h1>
        <ul>
            {% load myfilter %}
            {% for i in a_list %}
                <li> {{ i|oh }}</li>
            {% endfor %}
        </ul>
        <hr>
        <h1>这是for下面自定义filter的使用进阶版</h1>
        <ul>
            {% load myfilter %}
            {% for i in a_list %}
                <li> {{ i|oh_no:"这是进阶版的filter" }}</li>
            {% endfor %}
        </ul>
    </body>
    </html>

    代码实现效果如图

    今天就先写到这里吧!!!

    从csdn搬家过来的可能没有图片,原地址https://blog.csdn.net/weixin_38091140
  • 相关阅读:
    awk常用命令
    Linux 指令篇:使用者管理--sudo
    sax解析xml案例一
    DefaultHandler类
    Linux上vi(vim)编辑器使用教程
    SecureCRT上传下载数据的方法
    K近邻的决策边界以及K的影响
    KNN交叉验证,找出合适的K值
    KNN(K邻近值算法)手动版与库函数调用版
    linear_model.LinearRegression()线性回归之身高预测体重
  • 原文地址:https://www.cnblogs.com/Apy-0816/p/11100278.html
Copyright © 2011-2022 走看看