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模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
随机推荐
- TensorflowTensorflow细节-P158-slim的使用
slim的使用 从以下细节可以看出先使用slim = tf.contrib.slim要回用,剩下的看看以下代码就懂了 import tensorflow as tf slim = tf.contrib ...
- js清空数组
js-清空array数组 两种实现方式: 1.splice:删除元素并添加新元素,直接对数组进行修改,返回含有被删除元素的数组. arrayObject.splice(index,howmany,el ...
- ERROR: `elasticsearch` directory is missing in the plugin zip
该问题出现在为elasticsearch安装中文分词器插件时 问题发生在插件和es版本不匹配~ 解决: es版本与插件版本对应齐 命令行安装 C:\Users\SeeClanUkyo>F:\el ...
- HTML插入音频和视频:audio和video标签及其属性
一.上传到第三方网站,然后引入例如视频上传到优酷网,然后得到代码 <iframe height=498 width=510 src='http://player.youku.com/embed/ ...
- noi.ac #45 计数
\(des\) 给定 \(n\) 的全排列 + 一个值域属于 \([1, n]\) 的元素构成长度为 \(n + 1\) 的序列 问长度为 \(i\) 的本质不同的子序列的个数 \(sol\) 小学计 ...
- biiset用法
C++ bitset--高端压位卡常题必备STL 以下内容翻译自cplusplus.com,极大地锻炼了我的英语能力. bitset存储二进制数位. bitset就像一个bool类型的数组一样,但是有 ...
- sqlite3 入门
SQLite3 C语言API入门下载SQLite3 我们下载sqlite源码包,只需要其中的sqlite3.c.sqlite.h即可.最简单的一个创建表操作#include <stdio.h&g ...
- Comet OJ - Contest #9 & X Round 3题解
传送门 \(A\) 咕咕 typedef long long ll; int a1,a2,n,d;ll res; int main(){ scanf("%d%d%d",&a ...
- ModuleNotFoundError: No module named 'pynvx'
bogon:faceswap-master macname$ pip3 install pynvx Collecting pynvx Downloading https://files.pythonh ...
- andriod studio连接SQLite
SQLite SQLite是一种嵌入式的数据库引擎,以文件的形式保存数据的,专门适用于资源有限的设备上进行适量的数据存储. 从本质上来看,SQLite的操作方式只是一种更为便捷的文件操作,当应用程序创 ...