feat(requests): добавлен custom template filter для форматирования ISO дат

- Создан filter format_iso_date в req_tags.py
- Парсит ISO даты из API (с/без времени, с/без Z)
- Поддерживает форматы: d.m.Y, H:i, d.m.Y H:i, Y-m-d
- Обновлен шаблон для использования нового фильтра
- Более читаемое и надежное отображение дат и времени
This commit is contained in:
admin i 2025-12-03 07:45:45 +03:00
parent a435c77756
commit b8d8a428b9
2 changed files with 46 additions and 4 deletions

View File

@ -1,8 +1,49 @@
from django import template
from datetime import datetime
register = template.Library()
@register.filter
def in_list(value, csv):
items = [s.strip() for s in str(csv).split(",") if s.strip()]
return value in items
@register.filter
def format_iso_date(value, format_string="d.m.Y"):
"""
Форматирует ISO дату из API в читаемый формат.
Args:
value: строка ISO даты
(например, "2025-12-03" или "2025-12-03T10:30:00Z")
format_string: формат вывода ("d.m.Y", "H:i" и т.д.)
Returns:
Отформатированная дата или исходная строка при ошибке
"""
if not value:
return ""
try:
# Пробуем распарсить как полную ISO дату
if 'T' in str(value):
dt = datetime.fromisoformat(str(value).replace('Z', '+00:00'))
else:
# Только дата без времени
dt = datetime.strptime(str(value)[:10], '%Y-%m-%d')
# Форматируем по шаблону Django
format_map = {
'd.m.Y': dt.strftime('%d.%m.%Y'),
'H:i': dt.strftime('%H:%M'),
'd.m.Y H:i': dt.strftime('%d.%m.%Y %H:%M'),
'Y-m-d': dt.strftime('%Y-%m-%d'),
}
return format_map.get(format_string, dt.strftime('%d.%m.%Y'))
except (ValueError, AttributeError):
# Если не удалось распарсить, возвращаем первые 10 символов
return str(value)[:10] if value else ""

View File

@ -1,5 +1,6 @@
{% extends "base.html" %}
{% load static %}
{% load req_tags %}
{% block title %}Заявления{% endblock %}
@ -106,12 +107,12 @@
<div class="req-cell-content text-mono">
{% if obj.date_from or obj.date_to %}
{% if obj.date_from %}
{{ obj.date_from|slice:":10" }}<br>
{{ obj.date_from|format_iso_date:"d.m.Y" }}<br>
{% else %}
—<br>
{% endif %}
{% if obj.date_to %}
{{ obj.date_to|slice:":10" }}
{{ obj.date_to|format_iso_date:"d.m.Y" }}
{% else %}
—
{% endif %}
@ -147,8 +148,8 @@
<div class="req-cell req-cell-created">
<div class="req-cell-content small text-body-secondary">
{% if obj.created_at %}
{{ obj.created_at|slice:":10" }}<br>
{{ obj.created_at|slice:"11:16" }}
{{ obj.created_at|format_iso_date:"d.m.Y" }}<br>
{{ obj.created_at|format_iso_date:"H:i" }}
{% else %}
<span class="text-body-secondary">—</span>
{% endif %}