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:
parent
a435c77756
commit
b8d8a428b9
@ -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 ""
|
||||
|
||||
|
||||
@ -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 %}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user