Python - Django - 模板语言之 Filters(过滤器)
通过管道符 "|" 来使用过滤器,{{ value|过滤器:参数 }}
Django 的模板语言中提供了六十个左右的内置过滤器
urls.py:
from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^filter_test/', views.filter_test),
]
default:
如果一个变量的变量名不存在或者没有给其传值,可以通过 default 使用默认值
views.py:
from django.shortcuts import render, redirect, HttpResponse
from app01 import models # Filter 测试
def filter_test(request):
name = "Jack"
age = 18
return render(
request,
"filter_test.html",
{
"name": name,
"age": None,
})
这里的 age 变量传了一个空值
filter_test.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Filter 测试</title>
</head>
<body> <h1>Filter 测试页面</h1> <!-- default -->
{{ name }}
<br>
{{ name1|default:"这里不存在" }}
<br>
{{ age|default:"这里也不存在" }} </body>
</html>
name1 是没有定义的变量
运行效果:

注意:

这里不能带有空格
length:
返回字符串或列表的长度
views.py:
from django.shortcuts import render, redirect, HttpResponse
from app01 import models # Filter 测试
def filter_test(request):
name = "Jack"
age = 18
hobby = ["Reading", "Basketball", "Movie", "Music"]
return render(
request,
"filter_test.html",
{
"name": name,
"age": None,
"hobby_list": hobby,
})
filter_test.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Filter 测试</title>
</head>
<body> <h1>Filter 测试页面</h1> <!-- default -->
{{ name }}
<br>
{{ name1|default:"这里不存在" }}
<br>
{{ age|default:"这里也不存在" }} <br> <!-- length -->
{{ name|length }}
<br>
{{ hobby_list|length }}
<br>
{{ age|length }} </body>
</html>
运行效果:

这里计算了 name 变量值、hobby_list 列表、age 空值的长度
slice:
slice 是用来进行切片的
views.py:
from django.shortcuts import render, redirect, HttpResponse
from app01 import models # Filter 测试
def filter_test(request):
name = "Jack"
age = 18
hobby = ["Reading", "Basketball", "Movie", "Music"]
return render(
request,
"filter_test.html",
{
"name": name,
"age": None,
"hobby_list": hobby,
})
filter_test.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Filter 测试</title>
</head>
<body> <h1>Filter 测试页面</h1> <!-- default -->
{{ name }}
<br>
{{ name1|default:"这里不存在" }}
<br>
{{ age|default:"这里也不存在" }} <br> <!-- length -->
{{ name|length }}
<br>
{{ hobby_list|length }}
<br>
{{ age|length }} <br> <!-- 切片 -->
{{ hobby_list|slice:"0:2" }}
<br>
{{ name|slice:"0:2" }} </body>
</html>
运行效果:

filesizeformat:
将一串数字格式化成文件格式
views.py:
from django.shortcuts import render, redirect, HttpResponse
from app01 import models # Filter 测试
def filter_test(request):
name = "Jack"
age = 18
file_size = 988222836293733
hobby = ["Reading", "Basketball", "Movie", "Music"]
return render(
request,
"filter_test.html",
{
"name": name,
"age": None,
"hobby_list": hobby,
"filesize": file_size,
})
filter_test.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Filter 测试</title>
</head>
<body> <h1>Filter 测试页面</h1> <!-- default -->
{{ name }}
<br>
{{ name1|default:"这里不存在" }}
<br>
{{ age|default:"这里也不存在" }} <br> <!-- length -->
{{ name|length }}
<br>
{{ hobby_list|length }}
<br>
{{ age|length }} <br> <!-- 切片 -->
{{ hobby_list|slice:"0:2" }}
<br>
{{ name|slice:"0:2" }} <br> <!-- filesizeformat -->
{{ filesize|filesizeformat }} </body>
</html>
运行结果:

这里会根据大小格式化成 KB,MB,GB 和 TB
cut:
删除字符串或列表中和过滤器参数相同的内容
views.py:
from django.shortcuts import render, redirect, HttpResponse
from app01 import models # Filter 测试
def filter_test(request):
name = "Jack"
age = 18
file_size = 988222836293733
hobby = ["Reading", "Basketball", "Movie", "Music"]
return render(
request,
"filter_test.html",
{
"name": name,
"age": None,
"hobby_list": hobby,
"filesize": file_size,
})
filter_test.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Filter 测试</title>
</head>
<body> <h1>Filter 测试页面</h1> <!-- default -->
{{ name }}
<br>
{{ name1|default:"这里不存在" }}
<br>
{{ age|default:"这里也不存在" }} <br> <!-- length -->
{{ name|length }}
<br>
{{ hobby_list|length }}
<br>
{{ age|length }} <br> <!-- 切片 -->
{{ hobby_list|slice:"0:2" }}
<br>
{{ name|slice:"0:2" }} <br> <!-- filesizeformat -->
{{ filesize|filesizeformat }} <br> <!-- cut -->
{{ name|cut:"ac" }}
<br>
{{ hobby_list|cut:"Movie" }} </body>
</html>
运行结果:

Jack 被删除了 ac,hobby_list 列表被删除了 Movie
join:
连接字符串
views.py:
from django.shortcuts import render, redirect, HttpResponse
from app01 import models # Filter 测试
def filter_test(request):
name = "Jack"
age = 18
file_size = 988222836293733
hobby = ["Reading", "Basketball", "Movie", "Music"]
return render(
request,
"filter_test.html",
{
"name": name,
"age": None,
"hobby_list": hobby,
"filesize": file_size,
})
filter_test.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Filter 测试</title>
</head>
<body> <h1>Filter 测试页面</h1> <!-- default -->
{{ name }}
<br>
{{ name1|default:"这里不存在" }}
<br>
{{ age|default:"这里也不存在" }} <br> <!-- length -->
{{ name|length }}
<br>
{{ hobby_list|length }}
<br>
{{ age|length }} <br> <!-- 切片 -->
{{ hobby_list|slice:"0:2" }}
<br>
{{ name|slice:"0:2" }} <br> <!-- filesizeformat -->
{{ filesize|filesizeformat }} <br> <!-- cut -->
{{ name|cut:"ac" }}
<br>
{{ hobby_list|cut:"Movie" }} <br> <!-- join -->
{{ name|join:"+" }}
<br>
{{ hobby_list|join:"-" }} </body>
</html>
运行结果:

safe:
Django 模板会自动对 html、js 标签进行转义,safe 可以让 Django 不对标签进行转义
views.py:
from django.shortcuts import render, redirect, HttpResponse
from app01 import models # Filter 测试
def filter_test(request):
name = "Jack"
age = 18
file_size = 988222836293733
test_html = "<a href='www.baidu.com'>这是一个 html 标签</a>"
hobby = ["Reading", "Basketball", "Movie", "Music"]
return render(
request,
"filter_test.html",
{
"name": name,
"age": None,
"hobby_list": hobby,
"filesize": file_size,
"test_html": test_html,
})
filter_test.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Filter 测试</title>
</head>
<body> <h1>Filter 测试页面</h1> <!-- default -->
{{ name }}
<br>
{{ name1|default:"这里不存在" }}
<br>
{{ age|default:"这里也不存在" }} <br> <!-- length -->
{{ name|length }}
<br>
{{ hobby_list|length }}
<br>
{{ age|length }} <br> <!-- 切片 -->
{{ hobby_list|slice:"0:2" }}
<br>
{{ name|slice:"0:2" }} <br> <!-- filesizeformat -->
{{ filesize|filesizeformat }} <br> <!-- cut -->
{{ name|cut:"ac" }}
<br>
{{ hobby_list|cut:"Movie" }} <br> <!-- join -->
{{ name|join:"+" }}
<br>
{{ hobby_list|join:"-" }} <br> <!-- safe -->
{{ test_html }}
<br>
{{ test_html|safe }} </body>
</html>
运行效果:

没加 safe 的话就被 Django 默认转义了,加了 safe,a 标签就没被转义
truncatechars:
通过参数指定截断字符数,将多于指定的字符数的字符串字符进行截断,被截断的内容用 “...” 来代替
views.py:
from django.shortcuts import render, redirect, HttpResponse
from app01 import models # Filter 测试
def filter_test(request):
name = "Jack"
age = 18
file_size = 988222836293733
test_html = "<a href='www.baidu.com'>这是一个 html 标签</a>"
hobby = ["Reading", "Basketball", "Movie", "Music"]
text = "abcdefghijklmnopqrstuvwxyz"
return render(
request,
"filter_test.html",
{
"name": name,
"age": None,
"hobby_list": hobby,
"filesize": file_size,
"test_html": test_html,
"text": text,
})
filter_test.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Filter 测试</title>
</head>
<body> <h1>Filter 测试页面</h1> <!-- default -->
{{ name }}
<br>
{{ name1|default:"这里不存在" }}
<br>
{{ age|default:"这里也不存在" }} <br> <!-- length -->
{{ name|length }}
<br>
{{ hobby_list|length }}
<br>
{{ age|length }} <br> <!-- 切片 -->
{{ hobby_list|slice:"0:2" }}
<br>
{{ name|slice:"0:2" }} <br> <!-- filesizeformat -->
{{ filesize|filesizeformat }} <br> <!-- cut -->
{{ name|cut:"ac" }}
<br>
{{ hobby_list|cut:"Movie" }} <br> <!-- join -->
{{ name|join:"+" }}
<br>
{{ hobby_list|join:"-" }} <br> <!-- safe -->
{{ test_html }}
<br>
{{ test_html|safe }} <br> <!-- truncatechars -->
{{ text|truncatechars:10 }} </body>
</html>
运行结果:

date:
对时间进行格式化
views.py:
from django.shortcuts import render, redirect, HttpResponse
from app01 import models
import datetime # Filter 测试
def filter_test(request):
name = "Jack"
age = 18
file_size = 988222836293733
test_html = "<a href='www.baidu.com'>这是一个 html 标签</a>"
hobby = ["Reading", "Basketball", "Movie", "Music"]
text = "abcdefghijklmnopqrstuvwxyz"
now_time = datetime.datetime.now()
return render(
request,
"filter_test.html",
{
"name": name,
"age": None,
"hobby_list": hobby,
"filesize": file_size,
"test_html": test_html,
"text": text,
"now_time": now_time,
})
filter_test.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Filter 测试</title>
</head>
<body> <h1>Filter 测试页面</h1> <!-- default -->
{{ name }}
<br>
{{ name1|default:"这里不存在" }}
<br>
{{ age|default:"这里也不存在" }} <br> <!-- length -->
{{ name|length }}
<br>
{{ hobby_list|length }}
<br>
{{ age|length }} <br> <!-- 切片 -->
{{ hobby_list|slice:"0:2" }}
<br>
{{ name|slice:"0:2" }} <br> <!-- filesizeformat -->
{{ filesize|filesizeformat }} <br> <!-- cut -->
{{ name|cut:"ac" }}
<br>
{{ hobby_list|cut:"Movie" }} <br> <!-- join -->
{{ name|join:"+" }}
<br>
{{ hobby_list|join:"-" }} <br> <!-- safe -->
{{ test_html }}
<br>
{{ test_html|safe }} <br> <!-- truncatechars -->
{{ text|truncatechars:10 }} <br> <!-- 时间 -->
{{ now_time|date:"Y-m-d H:i:s"}} </body>
</html>
运行结果:

Python - Django - 模板语言之 Filters(过滤器)的更多相关文章
- Python - Django - 模板语言之自定义过滤器
自定义过滤器的文件: 在 app01 下新建一个 templatetags 的文件夹,然后创建 myfilter.py 文件 这个 templatetags 名字是固定的,myfilter 是自己起的 ...
- Python - Django - 模板语言之变量
前言: 在 Django 模板语言中变量用 {{ }},逻辑用 {% %} 在 urls.py 中添加对应关系 from django.conf.urls import url from django ...
- python django 模板语言循环字典
urls.py from django.conf.urls import url from django.contrib import admin from cmdb import views url ...
- Python - Django - 模板语言之 Tags(标签)
标签使用 {% %} 注释语句:{# #} for 循环: views.py: from django.shortcuts import render, redirect, HttpResponse ...
- 6月15日 python学习总结 Django模板语言相关内容
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
- Django模板语言,过滤器整理
Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...
- Django模板语言, 过滤器整理
Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...
- Django模板语言初识
一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...
- Django模板语言相关内容 Djan
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
随机推荐
- C++面向对象程序设计第三章习题答案解析
整理一下自己写的作业,供考试前复习用,哈哈 进入正题!!! 题目: 2.分析下面的程序,写出其运行时的输出结果 这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释 #inclu ...
- JQuery通过click事件获取当前点击对象的id,name,value属性等
$(".test").click(function () { var val=$(this).attr("id"); })
- Zatree - Zabbix图表展示
Zatree Zatree 是 一个php web的插件,做个展示树:可以提供host group的树形展示和在item里指定关键字查询及数据排序. 下载地址 可以根据zabbix不同版本下载:htt ...
- C# 分割字符串 分隔符是字符串的情况
string[] arr = System.Text.RegularExpressions.Regex.Split(str, "\r\n");
- PHP-FPM 的工作整理
1.php-fpm的配置文件 根据命令找到路径修改配置文件 ps -ef|grep php-fpm vim /home/php/etc/php-fpm.conf ;;;;;;;;;;;;;;;;;; ...
- [matlab工具箱] 曲线拟合Curve Fitting
——转载网络 我的matlab版本是 2016a 首先,工具箱如何打开呢? 在 apps 这个菜单项中,可以找到很多很多的应用,点击就可以打开具体的工具窗口 本文介绍的工具有以下这些: curve F ...
- C语言实现文件类型统计函数
#include<dirent.h> #include<limits.h> #include<sys/stat.h> #include<stdio.h> ...
- zotero zotfile插件 pdf附件文件夹在多系统下的同步设置
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/research/zotero_multiple_directory_pdf_sync ...
- [提权]sudo提权复现(CVE-2019-14287)
2019年10月14日, sudo 官方在发布了 CVE-2019-14287 的漏洞预警. 0x00 简介 sudo 是所有 unix操作系统(BSD, MacOS, GNU/Linux) 基本集成 ...
- 用vue做的购物车结算的功能
<!-- 占位 --> <template> <div> <div class="product_table"> <div c ...