例如,如果我有一个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'];
..而不必循环遍历数组的元素。
默认情况下这是否可行,而不创建自定义过滤器?
答案 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):
# ....