fixup! Show times as local time

This commit is contained in:
Tobias Kunze 2025-12-09 15:52:04 +01:00
parent 461565cdd4
commit 5e92168d34

View file

@ -1,6 +1,11 @@
import json import json
from datetime import datetime
from django import template from django import template
from django.utils.html import format_html
from django.utils.safestring import mark_safe
from servala.core.crd.utils import deslugify
register = template.Library() register = template.Library()
@ -10,3 +15,38 @@ def pprint(value):
if isinstance(value, (dict, list)): if isinstance(value, (dict, list)):
return json.dumps(value, indent=2) return json.dumps(value, indent=2)
return value return value
@register.filter
def localtime_tag(value, format_str="datetime"):
"""
Render a datetime value as a <time> element with datetime attribute.
JavaScript will convert this to local time on page load.
Usage: {{ instance.created_at|localtime_tag }}
{{ instance.created_at|localtime_tag:"date" }}
{{ instance.created_at|localtime_tag:"time" }}
"""
if value is None:
return "-"
if isinstance(value, str):
iso_value = value
elif isinstance(value, datetime):
iso_value = value.isoformat()
else:
return str(value)
if (
not iso_value.endswith("Z")
and "+" not in iso_value
and "-" not in iso_value[10:]
):
iso_value += "Z"
return format_html(
'<time datetime="{}" data-format="{}" class="local-time">{}</time>',
iso_value,
format_str,
iso_value,
)