Django初识(4.模板语言之filter、tag)

默认filter

通过管道符连接后面的方法,我们就可以在前端展示我们想要的数据

{{ time | date:"Y-m-d H:i:s"}}                 #将日期以年月日时分秒的形式显示
{{ name | truncatewords:"10" }}            #截取前10个字符
{{ name | first | upper}}                         #第一个字大写
{{ name | lower}}                                  #全部小写
{{ data | add:2}}                                   #使data加2后输出
{{ date|default:5 }}                               #若date没有数据则使用默认值5

示例: 

#Django01_app02/views.py
class PersonList(ListView):
    model = Person
    template_name = 'Django01_app02/filter_tag.html'

    def get_context_data(self, **kwargs):
        return {'data': '20','time':datetime.datetime.now()}
{% load mytag01 %}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    {{ data|add:2 }}
    {{ date|default:5 }}
    {{ time|date:"Y-m-d H:i:s" }}
</body>
</html>

当然了上面方面都是固定用法,在开发中我们通常会自定义这些函数。

在app目录下创建templatetags子目录,并在里面创建两个文件,__init__.py,用来声明这是一个包,另一个是你的tag/filter定义文件。比如myNewLibrary.py,那么在模板文件中可以这样使用:{% load myNewLibrary %}

然后我们可以在目录下创建一个py文件,例:mytag01.py

在我们的views文件里给context的字典里添加两个列表数据以便备用

#Django01_app02/views.py
class PersonList(ListView):
    model = Person
    template_name = 'Django01_app02/filter_tag.html'

    def get_context_data(self, *, object_list=None, **kwargs):
        context=super().get_context_data(object_list=object_list,**kwargs)
        context.update({'lst01':[1.12,2.123,3.1234,4.12345],'lst02':[1,2,3,4]})
        return context

编写mytag01.py

自定义的过滤器就是一个带1,2个参数的python函数,一个参数放变量值,一个用来放选项值

from functools import reduce
from django import template

register = template.Library()


@register.filter(is_safe=False)    #自定义fliter要注册装饰器一般默认在括号内填写is_safe=False
def add_filter(value, rounded=5):    #filter只有两个参数,第一个是类型,第二个可以根据需要填写
    assert isinstance(value, list)    #这里我们判断是否为列表类型否则不执行此后程序
    return round(sum(value), rounded)    #返回列表内数字之和并保留5位小数


@register.simple_tag                #自定义tag也需要注册,默认使用simple_tag
def add_tag(*args, **kwargs):
    args=args[1]+args[0]            #需要指定传入的参数
    assert isinstance(args, list)    #依旧判断是否为列表类型
    result = reduce(lambda x, y: x + y, args)    #累加,也可以用result=sum(args)
    rounded = kwargs.get('rounded')    #判断是否有保留位数
    rounded = rounded or 5            #无保留小数则使用默认值5
    result =round(result,rounded)
    return result

html文件:

{% load mytag01 %}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    {{ lst01|add_filter }}        #自定义tilter
    {% add_tag lst01 lst02 %}     #自定义simple_tag
</body>
</html>

然后代码完成后运行程序可以得到如下结果:

 可以发现自定义tilter和tag分别实现了将列表内数字相加的功能,两者不同的是,自定义的tag被传入了两个列表参数且把两个参数分别求和再相加。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慵懒之龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值