Как отформатировать объекты даты и времени в представлении и шаблоне в Django

Работаете с датами в Джанго? Модуль datetime в Python предлагает классы для удобного управления датами и временем. Вы можете отформатировать любую дату Python (при условии, что это объект datetime), используя метод strftime.

Форматирование даты

Объект datetime будет иметь метод strftime это позволяет вам предоставлять произвольный формат даты и печатать ее в виде строки, где вам нужно. Вы можете указать, как и где каждая часть даты должна отображаться со следующими идентификаторами:

Строка формата
Описание
%a Сокращенное название дня недели.
%A Полное название дня недели.
%b Сокращенное название месяца в локали.
%B Полное название месяца в локали.
%c Соответствующая локали дата и время.
%d День месяца в виде десятичного числа [01,31].
%H Час (24-часовые часы) в виде десятичного числа [00,23].
%I Час (12-часовые часы) в виде десятичного числа [01,12].
%j День года в виде десятичного числа [001,366].
%m Месяц как десятичное число [01,12].
%M Минута в виде десятичного числа [00,59].
%p Локальный эквивалент либо AM, либо PM.
%S Второй как десятичное число [00,61].
%U Номер недели в году (воскресенье как первый день недели) в виде десятичного числа [00,53]. Все дни в новом году, предшествующем первому воскресенью, считаются на неделе 0.
%w День недели в виде десятичного числа [0 (воскресенье), 6].
%W Номер недели в году (понедельник — первый день недели) в виде десятичного числа [00,53]. Все дни в новом году, предшествующем первому понедельнику, считаются на неделе 0.
%x Соответствующая дата локали.
%X Соответствующее время локали.
%y Год без века как десятичное число [00,99].
%Y Год с веком как десятичное число.
%Z Название часового пояса (без символов, если часовой пояс не существует).
%% Буквальный '%' персонаж.

В представлении

Внутри контроллера у вас есть доступ непосредственно к объекту datetime. Это означает, что вы можете просто выполнить функцию strftime и передать строку формата в качестве первого аргумента:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render
# Import Datetime
from datetime import datetime
def index(request):
# return HttpResponse("Hello, world !")
# Some Date Object, for example a default generated by datetime
myDate = datetime.now()
# Give a format to the date
# Displays something like: Aug. 27, 2017, 2:57 p.m.
formatedDate = myDate.strftime("%Y-%m-%d %H:%M:%S")
# Do something with the formatted date
return render(request, 'pages/index.html', {
'date': formatedDate
})

В шаблоне

Если вы хотите отформатировать строку в шаблоне, а не в представлении (контроллере), вы можете сделать это с помощью фильтра, а именно даты. Следующее представление (контроллер) возвращает объект даты в простой шаблон, который будет печатать дату, отправленную из представления:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render
# Import Datetime class
from datetime import datetime
def index(request):
# Some Date Object, for example a default generated by datetime
myDate = datetime.now()
# Render Some Template with a parameter accesible as date
return render(request, 'pages/index.html', {
'date': myDate
})

Содержание следующего шаблона (index.html) будет использовать следующий код для форматирования предоставленного объекта даты:

Prints something like:  Aug. 27, 2017, 2:57 p.m.
{{ date|date:'Y-m-d H:i' }}
Ссылка на основную публикацию