Django日期模板过滤器采用“a.m”格式字符“a”和“A”表示“AM”。如何在没有期间的情况下获得小写或者使用句号大写?
您可以使用较低和较高的过滤器,但它们会混淆月份和星期几的格式。
答案 0 :(得分:4)
或者,您可以继承基本功能,只需添加您正在寻找的输出。 (再次使用自定义过滤器)。
这是一个自定义模板fitler,它添加了一个新的参数'c',它将改变(获取它,c ...改变)a / A的功能。它基本上用作切换a / A功能的开关。这很难解释。以下是一些例子:
{{ datetime|smartdate:"h:i A" }} = '12:30 AM'
{{ datetime|smartdate:"h:i Ac" }} = '12:30 A.M.'
{{ datetime|smartdate:"h:i a" }} = '12:30 a.m.'
{{ datetime|smartdate:"h:i ac" }} = '12:30 am'
这是过滤器......
import re
from django.template.defaultfilters import date as date_filter
# --------------------------------------------------------------------------------
# |smartdate:"date format" -- new arg 'c' (change) alteras the AM/pm appearance
# --------------------------------------------------------------------------------
@register.filter
def smartdate(value, arg):
rendered = date_filter(value, arg)
if 'c' in arg:
rendered = re.sub('(a|p)\.m\.c', lambda m: '%sm' % m.group(1), rendered)
rendered = re.sub('(A|P)Mc', lambda m: '%s.M.' % m.group(1), rendered)
return rendered
编辑 - 稍微优化过滤器
答案 1 :(得分:1)
您可以创建自己的过滤器,因此模板将如下所示:
{{ value|date:"D d M Y" }} {{ value|meridiem:"u" }}
meridiem可能是:
def meridiem(value, arg="ld"):
if not value:
return u''
if 'u' in arg:
if 'd' in arg:
return 'A.M.'
return 'AM'
else:
if 'd' in arg:
return 'a.m.'
return 'am'
这不是很优雅,但可能是一个简单的解决方案。请注意,我没有测试代码。
答案 2 :(得分:0)
最好的方法是编写自定义模板过滤器。
文档here