IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django初识(4.模板语言之filter、tag) -> 正文阅读

[Python知识库]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被传入了两个列表参数且把两个参数分别求和再相加。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-03 01:09:59  更:2022-02-03 01:11:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:36:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码