Как вы могли прочитать, я боролся Получение данных из API в мои шаблоны Django. Как только я это сделал, я наткнулся на другую проблему, даты … кровавые полноформатные даты. Даты форматов, такие как: 2019-08-30T08: 22: 32.245-0700
Этот формат данных был тем, как API представил одну из полях, которые мне нужны.
Как, черт возьми, я мог преобразовать это? Я не мог просто использовать DateTime
Так что в Переполнение стека Я пошел.
Как сказал блестящий @ralf, если данные, которые я извлекал из API, были строкой, а не Python DateTime.DateTime
объект. У меня было 2 варианта:
- Пользовательский шаблонный фильтр, который преобразует строку на сегодняшний день и форматирует ее в строку с желаемым форматом
- По вашему мнению преобразовать строки в даты и отформатировать их в строки с желаемым форматом
Идея состояла в том, чтобы начать создавать Пользовательский шаблонный фильтр . Я скопировал следующее из исходного кода из Встроенный фильтр даты Поэтому я смог преобразовать обратно в формат даты, который хотел, я в итоге использовал {{custom_date: "d/b/y"}}
Затем я пошел вперед и использовал следующее, чтобы создать Пользовательский шаблонный тег
Шаг 1
Сначала мне пришлось создать TemplateTags
каталог внутри моего приложения, на том же уровне, что и модели.py, views.py и т. Д. Затем мне пришлось создать __ init__.py
Файл, чтобы убедиться, что каталог рассматривается как пакет Python.
В пределах TemplateTags
Dir Я создал свой custom_date.py
который будет держать мой пользовательский фильтр. Так что макет приложения будет выглядеть примерно так:
app/ __init__.py models.py templatetags/ __init__.py custom_date.py views.py
Шаг 2
Теперь о добавлении фильтра в custom_date.py
Возвращаясь к моему вопросу StackOverflow, я скопировал пример, созданный RALF. Что приведено ниже
from django import template from django.utils import formats import datetime register = template.Library() @register.filter(expects_localtime=True, is_safe=False) def custom_date(value, arg=None): if value in (None, ''): return '' if isinstance(value, str): api_date_format = '%Y-%m-%dT%H:%M:%S.%f%z' # 2019-08-30T08:22:32.245-0700 value = datetime.datetime.strptime(value, api_date_format) try: return formats.date_format(value, arg) except AttributeError: try: return format(value, arg) except AttributeError: return ''
У меня были некоторые ошибки с api_date_format
Потому что API произвел целую нагрузку дополнений, я проверил datetStrftime () и strptime () таблица поведения и сделал несколько прав. Как только я избавился от ошибок, я перешел к шаблону.
Сначала мне пришлось загрузить пользовательский фильтр в свой шаблон, затем я использовал custom_date
Чтобы изменить его на то, что мне нужно.
{% raw %}{{ ticket.fields.updated|custom_date"Y,D,M" }} {% endraw %}
И там у нас это … Я успешно отформатировал дату из строки ответа API.
Оригинал: “https://dev.to/mrpbennett/converting-dates-from-an-api-response-in-a-django-template-3l1i”