Фильтр даты Django для вывода «am» или «A.M.» - PullRequest
3 голосов
/ 15 декабря 2009

Фильтр шаблона даты Django принимает символ формата «a» для «a.m.» и «А» для «AM». Как получить нижний регистр без точек или верхний регистр с точками?

Вы можете использовать нижний и верхний фильтры, но они будут связываться с форматированием месяца и дня недели.

Ответы [ 3 ]

4 голосов
/ 15 декабря 2009

Также вы можете унаследовать базовую функциональность и просто добавить искомый вывод. (снова с пользовательским фильтром).

Вот пользовательский шаблонизатор, который добавляет новый аргумент '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 голос
/ 15 декабря 2009

вы можете создать свой собственный фильтр, чтобы ваши шаблоны выглядели так:

{{ 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'

это не очень элегантно, но может быть простым решением. остерегайтесь того, что я не тестировал код.

0 голосов
/ 15 декабря 2009

Лучший способ - написать собственный шаблонный фильтр.

Документация здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...