Рубрики
Без рубрики

Преобразование дат из ответа API в шаблоне Django

Как вы могли прочитать, я изо всех сил пытался получить данные из API в мои шаблоны Django. Однажды я пришел … Tagged with Python, Django, Tutorial.

Как вы могли прочитать, я боролся Получение данных из 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”