Python Django日期过滤器输出“;上午";或;上午;

Python Django日期过滤器输出“;上午";或;上午;,python,django,Python,Django,Django日期模板过滤器采用格式字符“a”表示“a.m.”,“a”表示“AM”。如何得到不带句点的小写字母或带句点的大写字母 您可以使用较低和较高的过滤器,但它们会干扰每月和每周的日期格式。最好的方法是编写自定义模板过滤器 文档您可以创建自己的过滤器,使模板如下所示: {{ value|date:"D d M Y" }} {{ value|meridiem:"u" }} 梅里迪姆可能在哪里: def meridiem(value, arg="ld"): if not value:

Django日期模板过滤器采用格式字符“a”表示“a.m.”,“a”表示“AM”。如何得到不带句点的小写字母或带句点的大写字母


您可以使用较低和较高的过滤器,但它们会干扰每月和每周的日期格式。

最好的方法是编写自定义模板过滤器


文档

您可以创建自己的过滤器,使模板如下所示:

{{ value|date:"D d M Y" }} {{ value|meridiem:"u" }}
梅里迪姆可能在哪里:

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'

这不是很优雅,但可能是一个简单的解决方案。请注意,我没有测试代码。

或者,您可以继承基本功能,只需添加所需的输出。(再次使用自定义过滤器)

这是一个自定义模板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我甚至想看看什么是“正确的”缩写形式-这似乎取决于。。。谢谢你的回答。这太完美了。内置过滤器无法处理这种情况,这是一个严重的疏忽。