python的Django模板系统(由于Django的强大需要定时更新)

版权声明:如需发表此文章,请附带转载标志或原地址链接,谢谢合作 https://blog.csdn.net/weixin_38091140/article/details/83656525

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>

代码实现效果如图

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

猜你喜欢

转载自blog.csdn.net/weixin_38091140/article/details/83656525