通过管道符 "|" 来使用过滤器,{{ value|过滤器:参数 }}

Django 的模板语言中提供了六十个左右的内置过滤器

urls.py:

  1. from django.conf.urls import url
  2. from django.contrib import admin
  3. from app01 import views
  4.  
  5. urlpatterns = [
  6. url(r'^filter_test/', views.filter_test),
  7. ]

default:

如果一个变量的变量名不存在或者没有给其传值,可以通过 default 使用默认值

views.py:

  1. from django.shortcuts import render, redirect, HttpResponse
  2. from app01 import models
  3.  
  4. # Filter 测试
  5. def filter_test(request):
  6. name = "Jack"
  7. age = 18
  8. return render(
  9. request,
  10. "filter_test.html",
  11. {
  12. "name": name,
  13. "age": None,
  14. })

这里的 age 变量传了一个空值

filter_test.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Filter 测试</title>
  6. </head>
  7. <body>
  8.  
  9. <h1>Filter 测试页面</h1>
  10.  
  11. <!-- default -->
  12. {{ name }}
  13. <br>
  14. {{ name1|default:"这里不存在" }}
  15. <br>
  16. {{ age|default:"这里也不存在" }}
  17.  
  18. </body>
  19. </html>

name1 是没有定义的变量

运行效果:

注意:

这里不能带有空格

length:

返回字符串或列表的长度

views.py:

  1. from django.shortcuts import render, redirect, HttpResponse
  2. from app01 import models
  3.  
  4. # Filter 测试
  5. def filter_test(request):
  6. name = "Jack"
  7. age = 18
  8. hobby = ["Reading", "Basketball", "Movie", "Music"]
  9. return render(
  10. request,
  11. "filter_test.html",
  12. {
  13. "name": name,
  14. "age": None,
  15. "hobby_list": hobby,
  16. })

filter_test.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Filter 测试</title>
  6. </head>
  7. <body>
  8.  
  9. <h1>Filter 测试页面</h1>
  10.  
  11. <!-- default -->
  12. {{ name }}
  13. <br>
  14. {{ name1|default:"这里不存在" }}
  15. <br>
  16. {{ age|default:"这里也不存在" }}
  17.  
  18. <br>
  19.  
  20. <!-- length -->
  21. {{ name|length }}
  22. <br>
  23. {{ hobby_list|length }}
  24. <br>
  25. {{ age|length }}
  26.  
  27. </body>
  28. </html>

运行效果:

这里计算了 name 变量值、hobby_list 列表、age 空值的长度

slice:

slice 是用来进行切片的

views.py:

  1. from django.shortcuts import render, redirect, HttpResponse
  2. from app01 import models
  3.  
  4. # Filter 测试
  5. def filter_test(request):
  6. name = "Jack"
  7. age = 18
  8. hobby = ["Reading", "Basketball", "Movie", "Music"]
  9. return render(
  10. request,
  11. "filter_test.html",
  12. {
  13. "name": name,
  14. "age": None,
  15. "hobby_list": hobby,
  16. })

filter_test.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Filter 测试</title>
  6. </head>
  7. <body>
  8.  
  9. <h1>Filter 测试页面</h1>
  10.  
  11. <!-- default -->
  12. {{ name }}
  13. <br>
  14. {{ name1|default:"这里不存在" }}
  15. <br>
  16. {{ age|default:"这里也不存在" }}
  17.  
  18. <br>
  19.  
  20. <!-- length -->
  21. {{ name|length }}
  22. <br>
  23. {{ hobby_list|length }}
  24. <br>
  25. {{ age|length }}
  26.  
  27. <br>
  28.  
  29. <!-- 切片 -->
  30. {{ hobby_list|slice:"0:2" }}
  31. <br>
  32. {{ name|slice:"0:2" }}
  33.  
  34. </body>
  35. </html>

运行效果:

filesizeformat:

将一串数字格式化成文件格式

views.py:

  1. from django.shortcuts import render, redirect, HttpResponse
  2. from app01 import models
  3.  
  4. # Filter 测试
  5. def filter_test(request):
  6. name = "Jack"
  7. age = 18
  8. file_size = 988222836293733
  9. hobby = ["Reading", "Basketball", "Movie", "Music"]
  10. return render(
  11. request,
  12. "filter_test.html",
  13. {
  14. "name": name,
  15. "age": None,
  16. "hobby_list": hobby,
  17. "filesize": file_size,
  18. })

filter_test.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Filter 测试</title>
  6. </head>
  7. <body>
  8.  
  9. <h1>Filter 测试页面</h1>
  10.  
  11. <!-- default -->
  12. {{ name }}
  13. <br>
  14. {{ name1|default:"这里不存在" }}
  15. <br>
  16. {{ age|default:"这里也不存在" }}
  17.  
  18. <br>
  19.  
  20. <!-- length -->
  21. {{ name|length }}
  22. <br>
  23. {{ hobby_list|length }}
  24. <br>
  25. {{ age|length }}
  26.  
  27. <br>
  28.  
  29. <!-- 切片 -->
  30. {{ hobby_list|slice:"0:2" }}
  31. <br>
  32. {{ name|slice:"0:2" }}
  33.  
  34. <br>
  35.  
  36. <!-- filesizeformat -->
  37. {{ filesize|filesizeformat }}
  38.  
  39. </body>
  40. </html>

运行结果:

这里会根据大小格式化成 KB,MB,GB 和 TB

cut:

删除字符串或列表中和过滤器参数相同的内容

views.py:

  1. from django.shortcuts import render, redirect, HttpResponse
  2. from app01 import models
  3.  
  4. # Filter 测试
  5. def filter_test(request):
  6. name = "Jack"
  7. age = 18
  8. file_size = 988222836293733
  9. hobby = ["Reading", "Basketball", "Movie", "Music"]
  10. return render(
  11. request,
  12. "filter_test.html",
  13. {
  14. "name": name,
  15. "age": None,
  16. "hobby_list": hobby,
  17. "filesize": file_size,
  18. })

filter_test.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Filter 测试</title>
  6. </head>
  7. <body>
  8.  
  9. <h1>Filter 测试页面</h1>
  10.  
  11. <!-- default -->
  12. {{ name }}
  13. <br>
  14. {{ name1|default:"这里不存在" }}
  15. <br>
  16. {{ age|default:"这里也不存在" }}
  17.  
  18. <br>
  19.  
  20. <!-- length -->
  21. {{ name|length }}
  22. <br>
  23. {{ hobby_list|length }}
  24. <br>
  25. {{ age|length }}
  26.  
  27. <br>
  28.  
  29. <!-- 切片 -->
  30. {{ hobby_list|slice:"0:2" }}
  31. <br>
  32. {{ name|slice:"0:2" }}
  33.  
  34. <br>
  35.  
  36. <!-- filesizeformat -->
  37. {{ filesize|filesizeformat }}
  38.  
  39. <br>
  40.  
  41. <!-- cut -->
  42. {{ name|cut:"ac" }}
  43. <br>
  44. {{ hobby_list|cut:"Movie" }}
  45.  
  46. </body>
  47. </html>

运行结果:

Jack 被删除了 ac,hobby_list 列表被删除了 Movie

join:

连接字符串

views.py:

  1. from django.shortcuts import render, redirect, HttpResponse
  2. from app01 import models
  3.  
  4. # Filter 测试
  5. def filter_test(request):
  6. name = "Jack"
  7. age = 18
  8. file_size = 988222836293733
  9. hobby = ["Reading", "Basketball", "Movie", "Music"]
  10. return render(
  11. request,
  12. "filter_test.html",
  13. {
  14. "name": name,
  15. "age": None,
  16. "hobby_list": hobby,
  17. "filesize": file_size,
  18. })

filter_test.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Filter 测试</title>
  6. </head>
  7. <body>
  8.  
  9. <h1>Filter 测试页面</h1>
  10.  
  11. <!-- default -->
  12. {{ name }}
  13. <br>
  14. {{ name1|default:"这里不存在" }}
  15. <br>
  16. {{ age|default:"这里也不存在" }}
  17.  
  18. <br>
  19.  
  20. <!-- length -->
  21. {{ name|length }}
  22. <br>
  23. {{ hobby_list|length }}
  24. <br>
  25. {{ age|length }}
  26.  
  27. <br>
  28.  
  29. <!-- 切片 -->
  30. {{ hobby_list|slice:"0:2" }}
  31. <br>
  32. {{ name|slice:"0:2" }}
  33.  
  34. <br>
  35.  
  36. <!-- filesizeformat -->
  37. {{ filesize|filesizeformat }}
  38.  
  39. <br>
  40.  
  41. <!-- cut -->
  42. {{ name|cut:"ac" }}
  43. <br>
  44. {{ hobby_list|cut:"Movie" }}
  45.  
  46. <br>
  47.  
  48. <!-- join -->
  49. {{ name|join:"+" }}
  50. <br>
  51. {{ hobby_list|join:"-" }}
  52.  
  53. </body>
  54. </html>

运行结果:

safe:

Django 模板会自动对 html、js 标签进行转义,safe 可以让 Django 不对标签进行转义

views.py:

  1. from django.shortcuts import render, redirect, HttpResponse
  2. from app01 import models
  3.  
  4. # Filter 测试
  5. def filter_test(request):
  6. name = "Jack"
  7. age = 18
  8. file_size = 988222836293733
  9. test_html = "<a href='www.baidu.com'>这是一个 html 标签</a>"
  10. hobby = ["Reading", "Basketball", "Movie", "Music"]
  11. return render(
  12. request,
  13. "filter_test.html",
  14. {
  15. "name": name,
  16. "age": None,
  17. "hobby_list": hobby,
  18. "filesize": file_size,
  19. "test_html": test_html,
  20. })

filter_test.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Filter 测试</title>
  6. </head>
  7. <body>
  8.  
  9. <h1>Filter 测试页面</h1>
  10.  
  11. <!-- default -->
  12. {{ name }}
  13. <br>
  14. {{ name1|default:"这里不存在" }}
  15. <br>
  16. {{ age|default:"这里也不存在" }}
  17.  
  18. <br>
  19.  
  20. <!-- length -->
  21. {{ name|length }}
  22. <br>
  23. {{ hobby_list|length }}
  24. <br>
  25. {{ age|length }}
  26.  
  27. <br>
  28.  
  29. <!-- 切片 -->
  30. {{ hobby_list|slice:"0:2" }}
  31. <br>
  32. {{ name|slice:"0:2" }}
  33.  
  34. <br>
  35.  
  36. <!-- filesizeformat -->
  37. {{ filesize|filesizeformat }}
  38.  
  39. <br>
  40.  
  41. <!-- cut -->
  42. {{ name|cut:"ac" }}
  43. <br>
  44. {{ hobby_list|cut:"Movie" }}
  45.  
  46. <br>
  47.  
  48. <!-- join -->
  49. {{ name|join:"+" }}
  50. <br>
  51. {{ hobby_list|join:"-" }}
  52.  
  53. <br>
  54.  
  55. <!-- safe -->
  56. {{ test_html }}
  57. <br>
  58. {{ test_html|safe }}
  59.  
  60. </body>
  61. </html>

运行效果:

没加 safe 的话就被 Django 默认转义了,加了 safe,a 标签就没被转义

truncatechars:

通过参数指定截断字符数,将多于指定的字符数的字符串字符进行截断,被截断的内容用 “...” 来代替

views.py:

  1. from django.shortcuts import render, redirect, HttpResponse
  2. from app01 import models
  3.  
  4. # Filter 测试
  5. def filter_test(request):
  6. name = "Jack"
  7. age = 18
  8. file_size = 988222836293733
  9. test_html = "<a href='www.baidu.com'>这是一个 html 标签</a>"
  10. hobby = ["Reading", "Basketball", "Movie", "Music"]
  11. text = "abcdefghijklmnopqrstuvwxyz"
  12. return render(
  13. request,
  14. "filter_test.html",
  15. {
  16. "name": name,
  17. "age": None,
  18. "hobby_list": hobby,
  19. "filesize": file_size,
  20. "test_html": test_html,
  21. "text": text,
  22. })

filter_test.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Filter 测试</title>
  6. </head>
  7. <body>
  8.  
  9. <h1>Filter 测试页面</h1>
  10.  
  11. <!-- default -->
  12. {{ name }}
  13. <br>
  14. {{ name1|default:"这里不存在" }}
  15. <br>
  16. {{ age|default:"这里也不存在" }}
  17.  
  18. <br>
  19.  
  20. <!-- length -->
  21. {{ name|length }}
  22. <br>
  23. {{ hobby_list|length }}
  24. <br>
  25. {{ age|length }}
  26.  
  27. <br>
  28.  
  29. <!-- 切片 -->
  30. {{ hobby_list|slice:"0:2" }}
  31. <br>
  32. {{ name|slice:"0:2" }}
  33.  
  34. <br>
  35.  
  36. <!-- filesizeformat -->
  37. {{ filesize|filesizeformat }}
  38.  
  39. <br>
  40.  
  41. <!-- cut -->
  42. {{ name|cut:"ac" }}
  43. <br>
  44. {{ hobby_list|cut:"Movie" }}
  45.  
  46. <br>
  47.  
  48. <!-- join -->
  49. {{ name|join:"+" }}
  50. <br>
  51. {{ hobby_list|join:"-" }}
  52.  
  53. <br>
  54.  
  55. <!-- safe -->
  56. {{ test_html }}
  57. <br>
  58. {{ test_html|safe }}
  59.  
  60. <br>
  61.  
  62. <!-- truncatechars -->
  63. {{ text|truncatechars:10 }}
  64.  
  65. </body>
  66. </html>

运行结果:

date:

对时间进行格式化

views.py:

  1. from django.shortcuts import render, redirect, HttpResponse
  2. from app01 import models
  3. import datetime
  4.  
  5. # Filter 测试
  6. def filter_test(request):
  7. name = "Jack"
  8. age = 18
  9. file_size = 988222836293733
  10. test_html = "<a href='www.baidu.com'>这是一个 html 标签</a>"
  11. hobby = ["Reading", "Basketball", "Movie", "Music"]
  12. text = "abcdefghijklmnopqrstuvwxyz"
  13. now_time = datetime.datetime.now()
  14. return render(
  15. request,
  16. "filter_test.html",
  17. {
  18. "name": name,
  19. "age": None,
  20. "hobby_list": hobby,
  21. "filesize": file_size,
  22. "test_html": test_html,
  23. "text": text,
  24. "now_time": now_time,
  25. })

filter_test.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Filter 测试</title>
  6. </head>
  7. <body>
  8.  
  9. <h1>Filter 测试页面</h1>
  10.  
  11. <!-- default -->
  12. {{ name }}
  13. <br>
  14. {{ name1|default:"这里不存在" }}
  15. <br>
  16. {{ age|default:"这里也不存在" }}
  17.  
  18. <br>
  19.  
  20. <!-- length -->
  21. {{ name|length }}
  22. <br>
  23. {{ hobby_list|length }}
  24. <br>
  25. {{ age|length }}
  26.  
  27. <br>
  28.  
  29. <!-- 切片 -->
  30. {{ hobby_list|slice:"0:2" }}
  31. <br>
  32. {{ name|slice:"0:2" }}
  33.  
  34. <br>
  35.  
  36. <!-- filesizeformat -->
  37. {{ filesize|filesizeformat }}
  38.  
  39. <br>
  40.  
  41. <!-- cut -->
  42. {{ name|cut:"ac" }}
  43. <br>
  44. {{ hobby_list|cut:"Movie" }}
  45.  
  46. <br>
  47.  
  48. <!-- join -->
  49. {{ name|join:"+" }}
  50. <br>
  51. {{ hobby_list|join:"-" }}
  52.  
  53. <br>
  54.  
  55. <!-- safe -->
  56. {{ test_html }}
  57. <br>
  58. {{ test_html|safe }}
  59.  
  60. <br>
  61.  
  62. <!-- truncatechars -->
  63. {{ text|truncatechars:10 }}
  64.  
  65. <br>
  66.  
  67. <!-- 时间 -->
  68. {{ now_time|date:"Y-m-d H:i:s"}}
  69.  
  70. </body>
  71. </html>

运行结果:

Python - Django - 模板语言之 Filters(过滤器)的更多相关文章

  1. Python - Django - 模板语言之自定义过滤器

    自定义过滤器的文件: 在 app01 下新建一个 templatetags 的文件夹,然后创建 myfilter.py 文件 这个 templatetags 名字是固定的,myfilter 是自己起的 ...

  2. Python - Django - 模板语言之变量

    前言: 在 Django 模板语言中变量用 {{ }},逻辑用 {% %} 在 urls.py 中添加对应关系 from django.conf.urls import url from django ...

  3. python django 模板语言循环字典

    urls.py from django.conf.urls import url from django.contrib import admin from cmdb import views url ...

  4. Python - Django - 模板语言之 Tags(标签)

    标签使用 {% %} 注释语句:{# #} for 循环: views.py: from django.shortcuts import render, redirect, HttpResponse ...

  5. 6月15日 python学习总结 Django模板语言相关内容

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  6. Django模板语言,过滤器整理

    Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...

  7. Django模板语言, 过滤器整理

    Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...

  8. Django模板语言初识

    一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...

  9. Django模板语言相关内容 Djan

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

随机推荐

  1. 如何识别和解决SQL Server中的热闩锁(PAGELATCH_EX)

    描述 在SQL Server中,内部闩锁体系结构可在SQL操作期间保护内存.通过页面上的读写操作,可以确保内存结构的一致性.从根本上讲,它具有两个类:缓冲区锁存器和非缓冲区锁存器,它们在SQL Eng ...

  2. YAML_13 嵌套循环,循环添加多用户

    with_nested ansible]# vim add1.yml --- - hosts: web2   remote_user: root   vars:     un: [a, b, c]   ...

  3. 检测 nginx 关闭切换keepalived

    检测nginx 端口启用  关闭 keepalived  检测 nginx 进程:然后关闭 keepalived ,关闭漂移IP : cat nginx_pid.sh #!/bin/bash whil ...

  4. codevs:1462 素数和:给定2个整数a,b 求出它们之间(不含a,b)所有质数的和。

    #include<iostream>#include<cstdio>#include<cmath>using namespace std;int main(){ i ...

  5. 如何快速把ps序列图层建立帧动画?

    工具ps 1.将序列帧图片载入ps 新建->脚本->将文件载入堆栈 2.制作序列帧动画 窗口->时间轴->时间轴面板右上角菜单->从图层建立帧 3.去除多余的透明画布 全 ...

  6. Mac zsh 所有命令失效

    正在配置一些东西,然后zsh的所有命令不能用了. 我艹...... 然后一顿猛查,发现有个命令好使,记录一下 在命令行只想输入下面命令 PATH=/bin:/usr/bin:/usr/local/bi ...

  7. opendir,readdir,closedir

     结构体dirent: struct dirent { ino_t d_ino; //inode number off_t d_off; //offset to the next diret unsi ...

  8. 如何查询数据库中所有表格,或者查询是否存在某个表格-mysql和oracle

    这个问题,在之前就有写过,但是想找到语句还是记不得,这里主要提及我自己有用到的数据库mysql和oracle 1.mysql 这个是自己安装的,所有配置都是默认配置没有改变,所以保存表名的表还是inf ...

  9. linux管道pipe详解

    linux管道pipe详解 https://blog.csdn.net/qq_42914528/article/details/82023408

  10. 如何在wcf中用net tcp协议进行通讯

    快速阅读 如何在wcf中用net tcp协议进行通讯,一个打开Wcf的公共类.比较好好,可以记下来. 配置文件中注意配置 Service,binding,behaviors. Service中配置en ...