天天看点

python Django 模板中如何使用模板过滤器指令及自定义过滤器

作者:运维木子李

#暑期创作大赛#

使用模板过滤器指令

创建一个 Django 项目,并在 views.py 中定义一个视图函数,将数据传递给模板:

# views.py
from django.shortcuts import render

def my_view(request):
    my_date = datetime.date(2022, 1, 1)
    my_time = datetime.time(13, 30, 45)
    my_text = "This is a long text that needs to be truncated."
    my_list = [1, 2, 3, 4, 5]
    return render(request, 'my_template.html', {
        'my_date': my_date,
        'my_time': my_time,
        'my_text': my_text,
        'my_list': my_list
    })           

在 my_template.html 模板中使用模板过滤器指令处理数据:

<!-- my_template.html -->
<!DOCTYPE html>
<html>
<head>
    <title>My Template</title>
</head>
<body>
    <h1>Date: {{ my_date | date:"F j, Y" }}</h1>
    <p>Time: {{ my_time | time:"H:i:s" }}</p>
    <p>Truncated Text: {{ my_text | truncatechars:30 }}</p>
    <p>Text with Line Breaks: {{ my_text | linebreaks }}</p>
    <p>List Length: {{ my_list | length }}</p>
</body>
</html>           

在 urls.py 中配置 URL 路由,将视图函数与 URL 关联起来:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('my-view/', views.my_view, name='my_view'),
]           

现在,当你访问 http://localhost:8000/my-view/ 时,将会渲染 my_template.html 模板,并在页面上显示经过模板过滤器指令处理后的数据:

  • Date: January 1, 2022
  • Time: 13:30:45
  • Truncated Text: This is a long text that need...
  • Text with Line Breaks:
This is a long text.
It has two lines.           
  • List Length: 5

这个案例展示了如何在 Django 模板中使用模板过滤器指令来处理数据,以便在页面上展示格式化的日期、时间,截取和换行处理的文本,以及列表的长度等信息。

自定义过滤器

在Django中,你可以通过自定义过滤器来拓展模板语言的功能。下面是一个示例,展示如何自定义一个过滤器:

在你的Django项目中的任意一个app下创建一个名为templatetags的文件夹(如果该文件夹已经存在则跳过此步骤)。

在templatetags文件夹下创建一个名为custom_filters.py的Python文件。

在custom_filters.py中编写你的自定义过滤器。例如,下面是一个将字符串转换为大写的过滤器的示例:

from django import template

register = template.Library()

@register.filter(name='uppercase')
def uppercase(value):
    return value.upper()           

在你的模板中加载自定义过滤器。在你的模板的顶部添加以下代码:

{% load custom_filters %}           
  1. 在模板中使用自定义过滤器。例如,要将一个变量my_variable转换为大写,你可以这样写:
{{ my_variable|uppercase }}           

这是一个简单的示例,你可以根据自己的需求编写更复杂的自定义过滤器。记得在完成以上步骤后重新启动Django开发服务器,以便让自定义过滤器生效。