在Django的模板引擎中,是否可以在整个数组中运行过滤器?

时间:2011-03-07 09:09:22

标签: django django-templates django-template-filters

例如,如果我有一个datetime.date个对象的数组,我想对它的每个元素应用一个日期格式过滤器,同时仍然使用该数组的默认字符串表示。

给定一个看起来像的日期数组:

[datetime.date(2011, 2, 28), datetime.date(2011, 3, 1), datetime.date(2011, 3, 2)]

假设我已将其传递给模板的上下文,我想在模板中执行此操作:

<script>
    // ...
    var dates = {{ my_date_array|date:'b d, Y' }};
    // ...
</script>

因此产生:

    var dates = ['Feb 28, 2011', 'Mar 1, 2011', 'Mar 2, 2011'];

..而不必循环遍历数组的元素。

默认情况下这是否可行,而不创建自定义过滤器?

1 个答案:

答案 0 :(得分:1)

查看the source,我会说使用默认的date过滤器是不可能的。

您必须在模板中使用循环,或者创建一个接受日期对象列表的自定义过滤器。

更新

通过利用现有过滤器创建自己的过滤器应该相对容易。例如:

from django.template.defaultfilters import date
from django import template
register = template.Library()

# Only mildly tested. Use with caution.
def datelist(values, arg=None):
    try:
        outstr = "', '".join([date(v, arg) for v in values])
    except TypeError: # non-iterable?
        outstr = date(values, arg)
    return "['%s']" % outstr
register.filter('datelist', datelist)

如果您不喜欢这种确定可迭代对象的方法,您还可以使用:

# requires Python >=2.4
from collections import Iterable

if isinstance(values, Iterable):
    # ....