栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 %}



  
  Title


    {{ data|add:2 }}
    {{ date|default:5 }}
    {{ time|date:"Y-m-d H:i:s" }}

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

在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 %}



  
  Title


    {{ lst01|add_filter }}        #自定义tilter
    {% add_tag lst01 lst02 %}     #自定义simple_tag

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/726087.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号