通过管道符 "|" 来使用过滤器,{{ 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>
运行结果: