Предобработка данных из базы данных, перед их выводом в HTML шаблон Django

Рейтинг: 0Ответов: 1Опубликовано: 01.07.2023

Всем привет!


В моем проекте есть необходимость вывода всех записей из таблицы в БД на страничку. Этот кейс закрыть легко, но проблема в том, что в записи присутсвует дата, которую нужно выводить в формате дд-мм-гггг, а не гггг-мм-дд.


Окей, написать функцию, которая это все обработает - легко, но каким образом это дело передать в context? Просто изначально я туда передаю все записи нужной мне таблицы:

records = IpcArchive.objects.all()
context = {
    "all_records": records,
}

Далее, уже в самом шаблоне, я через for бегу по all_records и вывожу нужные мне поля, но я не представляю, куда мне вставить обработчик для дат.


Подскажите, пожалуйста, как можно решить данную проблему... Есть идея, чтобы сразу через view рендерить HTML шаблон, но не будет ли это костыльно?

Ответы

▲ 1Принят

Во-первых, как указал @rpe4ka722, в settings есть настройка DATE_FORMAT (и ее datetime-товарищ DATETIME_FORMAT, которая задает формат дат во всей системе.

Синтаксис указан в документации.

Во-вторых, в самих шаблонах при использовании переменных вам доступны уже встроенные фильтры. Для вашего случая нам нужен фильтр date. (да, это та же страничка, что и выше. Встроенные фильтры умеют очень многое, советую пробежаться по ним, чтобы иметь примерное представление).

Таким образом, в нашем шаблоне это может выглядеть так:

{% for item in all_records %} 
    {{item.somedate|date:"%d-%m-%Y"}}
{% endfor %}

Если функционала встроенных фильтров вам не хватит, можно легко создать свои фильтры.

Ну и в третьих, вы можете создать собственный list или другую структуру, в которую положите нужные обработанные данные:

records = IpcArchive.objects.all()
modified_records = []
for rec in records:
    new_record = ... # тут мы что-то считаем или преобразуем и т.д.
    modified_records.append(new_record)
context = {
    "all_records": modified_records,
}

Еще один доступный путь - через аннотации и агрегацию, но это скорее о преобразовании query, чем о том, что вам нужно.

Как видите, доступных способов много, можно выбирать то, что больше подходит и удобно вам.