Django学习笔记:(五)模板过滤器

模板过滤器

  • 1 简介
  • 2 语法
  • 3 常见过滤器
    • 3.1 add
    • 3.2 addslashes
    • 3.3 center
    • 3.4 cut
    • 3.6 date
    • 3.6 default
    • 3.7 default_if_none
    • 3.8 dictsort
    • 3.9 dictsortreversed
    • 3.10 lower
    • 3.11 filesizeformat
    • 3.12 upper
    • 3.13 first
    • 3.14 last
    • 3.15 floatformat
    • 3.16 iriencode
    • 3.17 join
    • 3.18 slice
    • 3.19 safe
    • 3.20 length
    • 3.21 linenumbers
    • 3.22 random
  • 4 注意
  • 5 自定义过滤器
    • 5.1 创建一个`templatetags`目录
    • 5.2 __创建过滤器处理文件__
    • 5.3 __编写__


1 简介

Django 提供了大约 60 个内置的模板过滤器。参见内置过滤器参考


2 语法

{{ 变量名 | 过滤器:可选参数 }}
{{ 变量名 | 过滤器:可选参数 | 过滤器:可选参数 }}

3 常见过滤器

3.1 add

{{ Hulu|add:"2"}},将 字符串 的值加2或者两个 列表 相加

3.2 addslashes

{{ Hulu|addslashes}},在 字符串 中的引号前添加斜杠。如果Hulu是"I'm Hulu",输出是"I\'m Hulu"

3.3 center

{{ Hulu|center:"15" },在给定宽度的字段中使字符串居中

3.4 cut

{{ Hulu|cut:"u" }},将 字符串 中删除参数的所有值,输出为Hl

3.6 date

{{ pub_date|date:"Y-m-d"}},格式化 日期,输出为2024-05-20

3.6 default

{{ Hulu|default:"Hulu" }},如果值为 False, 0, 0.0, (), [], "",则使用给定的默认值。否则使用该值。

3.7 default_if_none

{{ Hulu|default:"Hulu" }},如果值为 None,则使用给定的默认值。否则使用该值。 注意如果给定一个空字符串,将不会使用默认值。如果你想使用空字符串,请使用 default 过滤器

3.8 dictsort

{{ Hulu|dictsort:"name" }},获取一个 字典列表,并按照参数中给出的键排序返回该列表

3.9 dictsortreversed

{{ Hulu|dictsort:"name" }},获取一个 字典列表,并按照参数中给出的键反向排序返回该列表

3.10 lower

{{ Hulu|lower }}字符串 转换为小写,输出为hulu

3.11 filesizeformat

{{ Hulu|filesizeformat }},以 “人类可读” 的文件大小为格式,如 13 KB4.1 MB102 bytes

3.12 upper

{{ Hulu|upper }}字符串 转换为大写,输出为HULU

3.13 first

{{Hulu|first}},返回 列表 的第一个项目

3.14 last

{{Hulu|last}},返回 列表 的最后一个项目

3.15 floatformat

{{Hulu|floartformat:3}},将 浮点数 四舍五入到小数点后参数值的位数,如果没有填参数则为小数点后一位

3.16 iriencode

{{ Hulu|iriencode }},将 IRI(国际化资源标识符)转换为适合包含在 URL 中的字符串。如果你想在 URL 中使用包含非 ASCII 字符的字符串,这一点是必要的。

3.17 join

{{ Hulu|join:" // " }},用字符串连接一个列表,如果Hulu=['a','b','c'],输出为a//b//c

3.18 slice

{{ Hulu|slice: "2" }},返回 列表 的一个片段

3.19 safe

{{ Hulu|safe }},标记一个字符串在输出前不需要进一步的 HTML 转义

3.20 length

{{ Hulu|length }},将显示 列表或者字符串 的长度,输出为4

3.21 linenumbers

{{ Hulu|linenumbers }},将显示带有行号的文本

3.22 random

{{ Hulu|random }},从 列表 中随机返回一个项目


4 注意

注意:过滤变量的类型

如果传给过滤器的数据类型不符合预期,可能会导致异常或未定义的行为。
为了避免在Django模板中对不合适的变量类型错误地使用过滤器,你可以采取以下几种策略:
1.视图层处理数据
2.自定义模板过滤器
3.模板中使用标签控制

5 自定义过滤器

开发者能通过 Python 代码自定义 filters 扩展集成模板引擎,通过 {% load %} 标签使其可用。
自定义过滤器参见官方文档

5.1 创建一个templatetags目录

定制自定义 filters 的位置就是 Django 应用内。如果它们关联至某个已存在的应用,在那里将它们打包就很有用;否则,它们能被添加至新应用。当一个 Django 应用被添加至 INSTALLED_APPS,所以其在常规位置(下面介绍)定义的过滤器都可以在模板中自动加载。
该应用应包含一个 templatetags 目录,与 models.pyviews.py 等同级。若该目录不存在,创建它——不要忘了用__init__.py 文件确保目录被视作一个 Python 包

5.2 创建过滤器处理文件

如果你的自定义标签/过滤器位于一个名为 `poll_extras.py` 的文件中,你的应用程序布局可能如下所示:
```
polls/
|   __init__.py
|   models.py
|   templatetags/
|   |-- __init__.py
|   |-- poll_extras.py
|-- views.py
```

5.3 编写

poll_extras.py文件中,你应该输入以下内容:

from django import template
register = template.Library()

例如poll_extras.py文件中在实现一个添加字符的自定义标签,和一个乘法的过滤器:

# 注册自定义简单标签
@register.simple_tag
def addstr_tag(strs):
    return 'hulu'%strs

# 注册自定义过滤器
@register.filter
def multiply(value, arg):
	return value * arg

# 如果只接收一个字符串作为第一个参数的模板过滤器,你需要使用 stringfilter 的装饰器
from django.template.defaultfilters import stringfilter
@register.filter
@stringfilter
def lower(value):
   	return value.lower()

在模板中使用以下代码:

{% load poll_extras %}
   
{% addstr_tag 'is cool' %}

{% 5|multiply: 8 %}

输出结果:

hulu is cool
40

你可能感兴趣的:(Django,django,学习,笔记)