Django从理论到实战(part20)--DLT常用过滤器

学习笔记,仅供参考

参考自:Django打造大型企业官网–Huang Y;

本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的记录一下。


文章目录

      • DLT常用过滤器
        • 过滤器简介
        • 准备工作
        • 过滤器add
        • 过滤器cut
        • 过滤器date
        • 过滤器default
        • 过滤器default_if_none
        • 过滤器first
        • 过滤器last
        • 过滤器join
        • 过滤器length
        • 过滤器lower
        • 过滤器upper
        • 过滤器random
        • 过滤器slice
        • 过滤器stringtags
        • 过滤器truncatechars
        • 过滤器truncatechars_html



DLT常用过滤器


过滤器简介

在模版中,有时候需要对一些数据进行处理以后才能使用。在Python中我们通过函数的形式来完成,而在模版中,则是通过过滤器来实现,过滤器中是通过|来处理数据的。


准备工作


我们首先新建一个项目newwebsite2,专门学习这个知识点:

django-admin startproject newwebsite2

进入项目文件夹:

cd newwebsite2

开启服务:

python manage.py runserver

在项目下创建模板文件夹templates,并在settings.py中设置模板文件夹的路径:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

过滤器add


该过滤器会将传进来的参数添加到value上,例如:

{{ value|add:"2" }}

上面的代码中,如果value是等于4,那么结果将是6,如果value是等于一个普通的字符串,比如abc,那么结果将是abc2add过滤器的源代码如下:

def add(value, arg):
    try:
        return int(value) + int(arg)
    except (ValueError, TypeError):
        try:
            return value + arg
        except Exception:
            return ''

  • 举个例子

现在,我们创建一个模板文件add_file.py:


<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>小黄之家title>
head>
<body>
    <p>
        {{ value1|add:value2 }}
    p>
	
body>
html>

在主urls.py文件中添加路由:

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('add/', views.add_list),
]

创建视图函数:

from django.http import HttpResponse
from django.shortcuts import render


def add_list(request):
    context = {
            "value1":[1, 2, 3], 
            "value2":[4, 5, 6]
            }
    return render(request, "add_file.html",
                  context = context)

向http://127.0.0.1:8000/add/发起访问:

Django从理论到实战(part20)--DLT常用过滤器_第1张图片


过滤器cut


该过滤器会移除value中所有指定的字符串,类似于python中的replace(args,""),例如:

{{ value|cut:" " }}

上述的代码将会移除value中所有的空格字符。


cut过滤器的源代码如下:

def cut(value, arg):
    """Remove all values of arg from the given string."""
    safe = isinstance(value, SafeData)
    value = value.replace(arg, '')
    if safe and arg != ';':
        return mark_safe(value)
    return value

  • 举个例子

现在,我们创建一个模板文件cut_file.py:


<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>小黄之家title>
head>
<body>
    <p>
        {{ "Hello World !"|cut:" " }}
    p>
	
body>
html>

在主urls.py文件中添加路由:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('add/', views.add_list),
    path('cut/', views.cut_list),
    path('my_test/', views.my_test),
]

创建视图函数:

def cut_list(request):
    return render(request, "cut_file.html")

向http://127.0.0.1:8000/cut/发起访问:

Django从理论到实战(part20)--DLT常用过滤器_第2张图片


过滤器date


该过滤器将一个日期按照指定的格式,格式化成字符串,例如:

#视图模块中
context = {
    "birthday": datetime.now()
}

#模版文件中
{{ birthday|date:"Y/m/d" }}

上述的代码将会输出2020/07/04。其中Y代表的是四位数字的年份,m代表的是两位数字的月份,d代表的是两位数字的日。

更多时间格式化的方式,见下表:

格式字符 描述 示例
Y 四位数字的年份 2018
m 两位数字的月份 01-12
n 月份,1-9前面没有0前缀 1-12
d 两位数字的天 01-31
j 天,但是1-9前面没有0前缀 1-31
g 小时,12小时格式的,1-9前面没有0前缀 1-12
h 小时,12小时格式的,1-9前面有0前缀 01-12
G 小时,24小时格式的,1-9前面没有0前缀 1-23
H 小时,24小时格式的,1-9前面有0前缀 01-23
i 分钟,1-9前面有0前缀 00-59
s 秒,1-9前面有0前缀 00-59

过滤器default


如果value被评估为False,就使用default过滤器提供的默认值,例如:

{{ value|default:"nothing" }}

如果value是等于一个空的字符串。比如"",那么以上代码将会输出nothing

备注:[]""None{}等这些在if判断中为False的value,在default过滤器中会被评估为False


过滤器default_if_none


如果value是None,就使用default_if_none提供的默认值,例如:

{{ value|default_if_none:"nothing" }}

如果value等于"",即空字符串,以上代码会输出空字符串,只有当valueNone时,以上代码才会输出nothing


过滤器first


该过滤器将返回列表/元组/字符串中的第一个元素,例如:

{{ value|first }}

上述代码中,如果value['a','b','c'],那么将返回a


过滤器last


该过滤器将返回列表/元组/字符串中的最后一个元素,示例代码如下:

{{ value|last }}

如果value是等于['a','b','c'],那么将返回c


过滤器join


该过滤器类似于Python中的join函数,将列表/元组/字符串用指定的字符进行拼接,例如:

{{ value|join:"-" }}

如果value是等于['a','b','c'],那么将返回a-b-c


过滤器length


该过滤器将获取列表/元组/字符串/字典的长度,例如:

{{ value|length }}

如果value是等于['a','b','c'],那么将返回3;如果valueNone,那么将返回0


过滤器lower


该过滤器将value中所有的字符全部转换成小写,例如:

{{ value|lower }}

如果value等于Hello World,那么将输出hello world


过滤器upper


该过滤器类似于lower,只不过是将指定的字符串全部转换成大写。


过滤器random


该过滤器可以在列表/字符串/元组中随机的选择一个值,例如:

{{ value|random }}

如果valued等于['a','b','c'],那么Django将会在abc中随机选择一个返回。


过滤器slice


该过滤器类似于Python中的切片操作,例如:

{{ some_list|slice:"2:" }}

以上代码将会将some_list2开始做切片操作。


过滤器stringtags


该过滤器会删除字符串中所有的html标签,例如:

{{ value|striptags }}

如果valuehello world,那么将会输出hello world


过滤器truncatechars


如果字符串value的长度超过了该过滤器指定的长度,那么就会进行切割,并且会拼接三个点来作为省略号,例如:

{{ value|truncatechars:5 }}

如果value等于北京欢迎您~,那么输出的结果是北京...

这就奇怪了,为什么输出结果不是北京欢迎您…呢?

这是因为,三个点也占了三个字符,北京+ ... 的字符长度为5,所以是北京...


当字符串vlaue的长度没有超过该过滤器指定的长度,那么将不进行切割,例如:

{{ "马鞍山"|truncatechars:5 }}

上述代码的输出结果依然是马鞍山


过滤器truncatechars_html


该过滤器类似于truncatechars,只不过不会切割html标签,例如:

{{ value|truncatechars:5 }}

如果value是等于

北京欢迎您~

,那么输出的是

北京...

你可能感兴趣的:(python,后端,python)