Django 模板之自定义过滤器
可以通过模板过滤器来修改变量的显示,过滤器的形式是: {{ variable | filter }}
过滤器可以采用链式的方式使用,例如: {{ text | escape | linebreaks }}
过滤器还可以带参数,例如: {{ text | biltruncate:30 }}
过滤器的参数中如果带有空格,那么需要用引号引起来,例如: {{ list | join:", " }}
示例:
1 from django.conf.urls import url 2 from django.contrib import admin 3 from polls import views 4 5 urlpatterns = [ 6 url(r'^admin/', admin.site.urls), 7 url(r'^filter1/$', views.filter1), 8 url(r'^filter2/$', views.filter2), 9 url(r'^filter3/$', views.filter3), 10 url(r'^filter4/$', views.filter4), 11 ]
1 from django.shortcuts import render 2 3 def filter1(request): 4 return render(request, 'filter1.html') 5 6 def filter2(request): 7 return render(request, 'filter2.html') 8 9 def filter3(request): 10 return render(request, 'filter3.html') 11 12 def filter4(request): 13 return render(request, 'filter4.html')
1 from django import template 2 3 register = template.Library() 4 5 def cut_filter(value, arg): 6 return value.replace(arg, '') 7 8 register.filter(name='cut_filter', filter_func=cut_filter)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Django进阶教程</title> 6 </head> 7 <body> 8 <p>欢迎来的Django进阶课堂</p> 9 {% load poll_filter %} 10 {{ "Hello All en" | cut_filter:" " }} 11 </body> 12 </html>
示例2:
1 from django import template 2 3 register = template.Library() 4 5 # 使用装饰器简化注册过程,register.filter可传参数name=方法名,默认可不写 6 @register.filter() 7 def cut_filter(value, arg): 8 return value.replace(arg, '')
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Django进阶教程</title> 6 </head> 7 <body> 8 <p>欢迎来的Django进阶课堂</p> 9 {% load poll_filter2 %} 10 {{ "Hello All en" | cut_filter:" " }} 11 </body> 12 </html>
示例3:
1 from django import template 2 from django.template.defaultfilters import stringfilter 3 4 register = template.Library() 5 6 @register.filter() 7 @stringfilter 8 def tolower(value): 9 return value.lower()
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Django进阶教程</title> 6 </head> 7 <body> 8 <p>欢迎来的Django进阶课堂</p> 9 {% load poll_filter3 %} 10 {{ "Hello All en" | tolower }} 11 </body> 12 </html>
示例4:
1 from django import template 2 from django.template.defaultfilters import stringfilter 3 from django.utils.safestring import mark_safe 4 5 register = template.Library() 6 7 # 原始的字符串会被转义 8 # 安全的字符串会被转义 9 # 需要被转义的字符串会被转义 10 # 使用Django的字符串会自动进行转义,但使用自定义的就就是直接输出,没有转义- 11 @register.filter() 12 def add(value, arg): 13 return "%s %s" %(value, arg) 14 15 # 使用is_safe参数,设为True强制转义 16 @register.filter(is_safe=True) 17 def add2(value, arg): 18 return "%s %s" %(value, arg) 19 20 @register.filter() 21 def add3(value, arg): 22 return mark_safe("%s %s" %(value, arg))
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Django进阶教程</title> 6 </head> 7 <body> 8 <p>欢迎来的Django进阶课堂</p> 9 {% load poll_filter4 %} 10 11 <!--定义一个变量并输出--> 12 {% with "<h1>hello</h1>" as tmpvalue %} 13 <p>{{ tmpvalue|capfirst }}</p> 14 {% endwith %} 15 <br> 16 {% with "<h1>hello</h1>" as tmpvalue2 %} 17 <p>{{ tmpvalue2|add:"world" }}</p> 18 {% endwith %} 19 <br> 20 {% with "<h1>hello</h1>" as tmpvalue3 %} 21 <p>{{ tmpvalue3|add2:"world" }}</p> 22 {% endwith %} 23 <br> 24 {% with "<h1>hello</h1>" as tmpvalue4 %} 25 <p>{{ tmpvalue4|add3:"world" }}</p> 26 {% endwith %} 27 </body> 28 </html>

浙公网安备 33010602011771号