templatetags: add adjust_to_week_monday and iterate_days_until (#54806)

This commit is contained in:
Frédéric Péters 2021-06-13 08:26:16 +02:00
parent 1e13d82e8e
commit ffc4d8e611
2 changed files with 41 additions and 0 deletions

View File

@ -1190,3 +1190,24 @@ def test_convert_as_list():
return range(5)
assert tmpl.render({'foo': list_range}) == '0'
def test_adjust_to_week_monday(pub):
t = Template('{{ value|adjust_to_week_monday }}')
assert t.render({'value': '2021-06-13'}) == '2021-06-07'
t = Template('{{ value|adjust_to_week_monday }}')
assert t.render({'value': '2021-06-14'}) == '2021-06-14'
t = Template('{{ value|adjust_to_week_monday }}')
assert t.render({'value': datetime.datetime(2021, 6, 14, 0, 0)}) == '2021-06-14'
def test_iterate_days_until(pub):
t = Template(
'{% for day in value|iterate_days_until:value2 %}{{ day }}{% if not forloop.last %}, {% endif %}{% endfor %}'
)
assert (
t.render({'value': '2021-06-13', 'value2': '2021-06-16'})
== '2021-06-13, 2021-06-14, 2021-06-15, 2021-06-16'
)
assert t.render({'value': 'error1', 'value2': 'error2'}) == ''

View File

@ -437,6 +437,26 @@ def age_in_working_days_with_saturday(value, arg):
return age_in_working_days(value, arg, saturday_is_a_working_day=True)
@register.filter(expects_localtime=True)
def adjust_to_week_monday(value):
value = parse_date(unlazy(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(unlazy(value))
until = parse_date(unlazy(until))
if not (value and until):
return
while value < until:
yield value
value = value + datetime.timedelta(days=1)
yield value
@register.simple_tag
def standard_text(text_id):
return mark_safe(TextsDirectory.get_html_text(str(text_id)))