misc: add |adjust_to_week_monday & |iterate_days_until filters (#55550)
This commit is contained in:
parent
a23696d047
commit
ce5d2fbfca
|
@ -569,6 +569,26 @@ def datetime_in_past(value):
|
|||
return value <= date_now
|
||||
|
||||
|
||||
@register.filter(expects_localtime=True)
|
||||
def adjust_to_week_monday(value):
|
||||
value = parse_date(value)
|
||||
if not value:
|
||||
return ''
|
||||
return value - datetime.timedelta(days=value.weekday())
|
||||
|
||||
|
||||
@register.filter(expects_localtime=True)
|
||||
def iterate_days_until(value, until):
|
||||
value = parse_date(value)
|
||||
until = parse_date(until)
|
||||
if not (value and until):
|
||||
return
|
||||
while value < until:
|
||||
yield value
|
||||
value = value + datetime.timedelta(days=1)
|
||||
yield value
|
||||
|
||||
|
||||
def parse_decimal(value, default=Decimal(0)):
|
||||
if isinstance(value, six.string_types):
|
||||
# replace , by . for French users comfort
|
||||
|
|
|
@ -638,6 +638,27 @@ def test_datetime_in_past(value, expected):
|
|||
assert t.render(Context({'value': value})) == str(expected)
|
||||
|
||||
|
||||
def test_adjust_to_week_monday():
|
||||
t = Template('{{ value|adjust_to_week_monday|date:"Y-m-d" }}')
|
||||
assert t.render(Context({'value': '2021-06-13'})) == '2021-06-07'
|
||||
t = Template('{{ value|adjust_to_week_monday|date:"Y-m-d" }}')
|
||||
assert t.render(Context({'value': '2021-06-14'})) == '2021-06-14'
|
||||
t = Template('{{ value|adjust_to_week_monday|date:"Y-m-d" }}')
|
||||
assert t.render(Context({'value': datetime.datetime(2021, 6, 14, 0, 0)})) == '2021-06-14'
|
||||
|
||||
|
||||
def test_iterate_days_until():
|
||||
t = Template(
|
||||
'{% for day in value|iterate_days_until:value2 %}{{ day|date:"Y-m-d" }}{% if not forloop.last %}, {% endif %}{% endfor %}'
|
||||
)
|
||||
assert (
|
||||
t.render(Context({'value': '2021-06-13', 'value2': '2021-06-16'}))
|
||||
== '2021-06-13, 2021-06-14, 2021-06-15, 2021-06-16'
|
||||
)
|
||||
|
||||
assert t.render(Context({'value': 'error1', 'value2': 'error2'})) == ''
|
||||
|
||||
|
||||
def test_decimal_templatetag():
|
||||
tmpl = Template('{{ plop|decimal }}')
|
||||
assert tmpl.render(Context({'plop': 'toto'})) == '0'
|
||||
|
|
Loading…
Reference in New Issue