针对特定类型的所有变量的Django模板过滤器

2024-06-07 14:45:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django中,我希望在所有模板中为特定类型的所有变量使用特定的过滤器。在

例如,假设我想使用一个过滤器,根据用户设置将日期转换为Jalali日历。在本例中,我希望这个过滤器应用于我将在模板中使用的所有日期变量。在

我有一个模板叫做基本.html我所有的模板都扩展了它。在

如何做到这一点?在

更新:我将用一个例子来阐明我到底想做什么。在

我有一个名为Post的模型,它的字段名为publish_date。像这样的东西。在

class Post(models.Model):
    title = models.CharField()
    content = models.TextField()
    publish_date = models.DateTimeField(auto_now_add=True)

现在,当我使用模板输出一篇文章时,我希望我的所有帖子publish_date和模板中所有其他变量,这些变量表示要使用一个名为jalali_date的过滤器进行过滤。我要格式化某物的日期。在

我知道如何使用自定义标记和过滤器,但我不知道如何使用它们来完成类似的事情(如果可以使用它们来实现)。在

更新2: 只是为了更清楚:我已经写了jalali_日期过滤器。问题是如何将它自动应用到我模板中的所有日期变量。在


Tags: django用户模型模板过滤器类型datemodels
1条回答
网友
1楼 · 发布于 2024-06-07 14:45:23

如果您想通过自定义过滤器来实现这一点,请阅读关于过滤器here,下面的代码也许可以帮助您:

import datetime, time

from django import template
import khayyam

register = template.Library()

def jalali_date(date):
    """Converts Date into JalaliDate"""
    timestamp = time.mktime(datetime.datetime.timetuple(date))
    jalali_date = khayyam.JalaliDate.fromtimestamp(timestamp)
    return str(jalali_date)

register.filter('jalali_date', jalali_date)

然后在template中可以使用类似于下面的内容(假设templatetag文件nam是jdate):

^{pr2}$

但是如果您想自动识别并更改某些类型的值,则必须使用^{}(而不是过滤器),请阅读有关自定义MiddleWarehere的代码片段。在

注意:要使用非内置过滤器,必须在INSTALLED_APPS中添加容器应用程序。在

相关问题 更多 >

    热门问题