python - 特定类型的所有变量的django模板过滤器

标签 python django django-templates django-template-filters

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

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

我有一个名为 base.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_date 过滤器。问题是如何将它自动应用到模板中的所有日期变量。

最佳答案

如果您想通过自定义过滤器实现此功能,请阅读有关过滤器的信息 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)

然后在模板中你可以像下面这样使用它(假设templatetag file nam是jdate):

{% load jdate %}
...
{{ publish_date|jalali_date }}
...

但如果您想自动识别和更改某些类型的值,您必须使用 MiddleWares (不是过滤器),阅读有关自定义 MiddleWare 的代码片段 here .

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

关于python - 特定类型的所有变量的django模板过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31195752/

相关文章:

python - 合并 pandas 数据帧时出现数据类型错误

python - 如何在左键单击时显示 QMenu

Django:将对象从模板传递到 View

python - 如何在 Django 模板中使用 __repr__ 方法?

python - Django 模板是否实现了逻辑表达式的短路?

php - 为什么我的 Python 代码比 PHP 中的相同代码慢 100 倍?

python - 如何通过 TOR 和 Privoxy 使用 Python 请求获取 HTTPS 内容

python - Django 教程 - TemplateDoesNotExist at/polls/

Python - 类似 PHP 的动态数组

python - 如何在 Django 中序列化 ImageField?