Django框架有哪些过滤器

这期内容当中小编将会给大家带来有关Django框架有哪些过滤器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

创新互联"三网合一"的企业建站思路。企业可建设拥有电脑版、微信版、手机版的企业网站。实现跨屏营销,产品发布一步更新,电脑网络+移动网络一网打尽,满足企业的营销需求!创新互联具备承接各种类型的成都网站制作、成都网站建设项目的能力。经过十余年的努力的开拓,为不同行业的企事业单位提供了优质的服务,并获得了客户的一致好评。

过滤器:(Filters)

常用过滤器介绍:

在Django的模板语言中,通过使用过滤器来改变变量的显示。

过滤器的语法: {{ value|filter_name:参数 }}

使用管道符"|"来应用过滤器。

这里的过滤的意思实际上个人认为概念很模糊,过滤器的意思是将变量通过使用后端的方法将变量进行相关操作加工逻辑处理的封装之后拿到前端去使用的一种过程实现。

例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。lower在这里的作用是将文本全都变成小写。

注意事项:

##过滤器支持链式操作,即一个过滤器的输出结果作为另一个过滤器的输入

##过滤器可以接收参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。

##过滤器参数包含空格的话,必须用引号包裹起来,比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:', ' }}

##管道符‘|’左右没有空格。一定要注意,没有空格

Django的模板语言中提供了大约六十个内置过滤器。这里主要拿出一些常见的方法来介绍:

#default

如果一个变量是false或空,使用给定的默认值,否则使用该变量的值。

{{ value|default:"nothing"}}
如果value没有传值或者值为空的话就显示nothing

#length

返回值的长度,作用于字符串和列表

{{ value|length }}
后端:
s = 'what f**k!'
l = ['a', 'b', 4, 5, 8]
前端:
{{ l|length }}
{{ s|length }}

显示结果:

5 10

#filesizeformat

将值格式化为一个可理解的文件大小单位(13kb,4m)

{{ value|filesizeformat }}
后端:
n = 102478450
前端:
{{ n|filesizeformat }}

显示结果:

97.7 MB

#slice 切片(顾头不顾尾)

{{value|slice:"开始索引:结束索引:步长"}}
后端:
s = 'what f**k!'
l = ['a', 'b', 4, 5, 8]
前端:
{{ l|slice:'1:4' }} 
{{ s|slice:'5:9' }}
{{ l|slice:'2:-1' }}    

显示结果:

['b', 4, 5] 
f**k 
[4, 5]

#date 时间格式化输出

{{ value|date:"Y-m-d H:i:s"}}
后端:
import datetime
ctime = datetime.datetime.now()
前端:
{{ ctime }}
{{ ctime|date:'Y-m-d H:i:s' }}

显示结果:

June 11, 2019, 2:51 p.m. 
2019-06-11 14:51:24

#safe

Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。

后端:
value = "点我"
前端:
{{ value }}
{{ value|safe }}

结果:

点我 
点我
下面那个‘点我’在页面上是一个a标签,点击可跳转

上面的safe是在前端取消转义,后端取消转义方法如下:

from django.utils.safestring import mark_safe
xxx = mark_safe('

我是h2标签

')

#truncatechars

如果字符串字符多于指定的字符数量,那么会被截断,截断的剩余字符将用省略号结尾表示。

参数:截断的字符数(包含三个点)

后端:
ss = 'abcdefghijklmnopqrstuvwxyz'
前端:
{{ ss|truncatechars:10 }}

结果:(注意...也算进长度里了)

abcdefg...

#truncatewords

以一个单词为一个元素,单词与单词之间的空格为区分依据,将一定数量的单词进行截断,截断后面的用...表示

一个单词加上一个空格  计数一个。

后端:
sss = "Life was like a box of chocolates you never know what you're gonna get."
前端:
{{ sss|truncatewords:7 }}

显示结果:

Life was like a box of chocolates ...
(注意chocolates后面有个空格)

#cut

移除变量中所有的指定相同的字符串

{{ value|cut:' ' }}
后端:
ssss = 'you do bb now,bb is not good thing, why do you bb for too many times!'
前端:
{{ ssss|cut:'bb' }}

显示结果:

you do now, is not good thing, why do you for too many times!

#join

将列表中的元素用指定字符连接起来

后端
ll = [1, 2, 3, 4, 5]
前端
{{ ll|join:'@' }}

结果

1@2@3@4@5

标签介绍:

#for循环(内部有个empty判断,详见下面if判断示例)

后端
ll = [1, 2, 3, 4, 5]
前端
{% for foo in ll %}
     

{{ foo }}

{% endfor %}

结果显示:

1
2
3
4
5

forloop的使用:

后端
ll = [1, 2, 3, 4, 5]
前端
{% for foo in ll %}
     

{{ forloop }}

{% endfor %}

forlop里面有几个属性需要我们注意,比如 counter0,counter,first,last它们对应的值在for循环过程中的开始和结束是不一样的

#if 判断

{% for foo in l %}
if else
    {% if flag %}
        

flag不为空

        {% else %}         

flag是空

    {% endif %}      {#(l = ['a', 'b', 'c', 'd', 'e'])#} {% for foo in l %}     {% if forloop.first %}         

这是我的第一次

    {% elif forloop.last %}         

这是最后一次了啊

    {% else %}         

嗨起来!!!

    {% endif %}     {% empty %}            

你给我的容器类型是个空啊,没法for循环

{% endfor %}
l = ['a', 'b', 'c', 'd', 'e']
这是我的第一次
嗨起来!!!
嗨起来!!!
嗨起来!!!
这是最后一次了啊
l = []
你给我的容器类型是个空啊,没法for循环

3.自定义过滤器/标签/inclusion_tag:

必须做的三件事

1.在应用名下新建一个名为templatetags文件夹(必须叫这个名字)

2.在该新建的文件夹内新建一个任意名称的py文件

3.在该py文件中需要固定写下面两句代码

①这里在app01项目程序文件夹新建templatetags文件夹,在此文件夹内新建一个mine.py文件,打开mine.py文件>>输入:

from django import template
register = template.Library()
# 自定义过滤器
@register.filter(name='my_filter')
def index(a, b):
    return a*b
# 自定义标签:
@register.simple_tag
def plus(a, b, c):
    return a+b+c

②前端html文件内使用过滤器或者标签:

{% load mine %}   
{{ 9|my_filter:11 }}  
{% my_tag 1 2 3 %}  

显示的结果:

99
6

 自定义inclusion_tag

 inclusion_tag的作用:创建一个动态的html页面文件a.html,这个页面文件a可以在另外一个页面b中被调用,实现这个页面a应该有的功能。比如:

在上面的mine.py文件中创建inclusion_tag:

# mine.py文件  创建inclusion_tag
from app01 import models 
from django import template
register = template.Library()
@register.inclusion_tag('inclusion_t_test.html', name='my_inclusion')
def func():
    book_list = models.Book.objects.all()
    return {'list': book_list} 
#将book_list的QuerySet对象列表传进inclusion_t_test.html文件

inclusion_t_test.html文件里面:



    
        
            
            
            
        
    
    
        {% for obj in list %}
            
                
                
                
            
        {% endfor %}
    
idtitleprice
{{ obj.id }}{{ obj.title }}{{ obj.price }}

调用的html页面文件:

{% load mine %}    
{% my_inclusion %}  

上述就是小编为大家分享的Django框架有哪些过滤器了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


当前标题:Django框架有哪些过滤器
本文地址:http://ybzwz.com/article/ghgojd.html