有时后端返回的数据,需要前端处理,比如超过XX个字符展示...这种需求,就需要用到filter。django有自带的filter模块,也可以自己定义filter来过滤。
一、django自带filter:
views.py:
def test(request): import datetime cur_time=datetime.datetime.now() age = 18 name = 'marry' article_content = 'django有自带的分页,非常的好用,代码如下:django有自带的分页,非常的好用,代码如下:django有自带的分页,非常的好用,代码如下:' navs = ["我的日记","我的相册",'我的心情','我的心情1','我的心情2','我的心情3'] comments = "<h1 style='font-size:500px'>你好呀</h1>" h1_str = '<p style="font-size:98px">哈哈哈哈</p>' js_str="<script>alert('哈哈哈哈')</script>" article_content = "朝鲜一哥金三胖,已经登上太阳,为了避免太阳太热,选择晚上奔上太阳" say = "今天吃饭的时候,碰到一个傻x,那个家伙实在是太213了,公然插队,吃完饭在马路上随地大小便,够sb的。" return render(request,'test.html',locals()) #locals()就是把所有定义的变量返回
二、自定义filter:目录是 app模块下建一个放tags的目录。my_tags.html
目录结构:
代码:
from django import template #自定义tags。必须在user下创建一个python package,并且包名必须为“templatetags” register=template.Library() #register名字也是固定的 @register.filter(name='hm') #这里的name是前端调用方法时的name,不加的话就是方法名#@register.filter() def mingan(value): if "金三胖" in value: value=value.replace("金三胖","金正恩") return value @register.filter() def mingan2(value,s): #前端传参,自定义filter最多只能两个参数 if "金三胖" in value: value=value.replace("金三胖",s) return value #simple tag: @register.simple_tag #simple_tag可以传多个参数 def mingan3(value,*args): for s in args: if s in value: value=value.replace(s,"**") return value
三、前端用自定义filter和自带filter的方式
{% load my_tags %} #这里要引入自定义filter {#引入自定义的tags#} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ age }} {{ age|add:"1" }} {#age的基础上加1#} <br> {{ name }} {{ name |add:"先生"|upper}} {#支持链式操作#} <br> {{ comments }} {#{{ comments|safe }}#} {#如果后边加了safe的话,认为这个是安全的字符串,浏览器会按照标签内容解析。容易造成CSS注入,所以当不需要浏览器解析标签时,就不要加safe#} <br> {{ article_content|truncatechars:"20" }} {#截断字符串的,多余的字符串用...显示#} <br> {{ navs|slice:"0:3" }} {#切片#} <br> {{ navs.0 }} {#获取第0个元素#} <br> {{ navs|length }} {#获取长度#} <br> {{ navs|join:"====" }} {#拼接#} <br> {{ author |default:"管理员" }} <br> {{ cur_time|date:'Y/m/d H:i:s' }} <br> {{ js_str }} {#{{ js_str|safe }}#} {#如果后边加了safe的话,认为这个是安全的字符串,浏览器会按照标签内容解析。容易造成JS注入#} <br> {{ article_content|hm }} {{ article_content|mingan2:'金胖子' }} {#register.filter 用法#} {#用法#} <br> {% mingan3 say "213" "sb" "傻x"%} {#simple tag 用法#} <br> {{ name|lower }} </body> </html>
四、urls.py中urlpatterns 加上“path('test/', views.test),”
然后运行django工程,访问127.0.0.1:8000/test。样式应该如下图