Datetime format python django

How to format datetime objects in the view and template in Django

Carlos Delgado

Learn how to provide a custom format to a datetime object in Django.

Working with dates in Django? The datetime module of Python offers classes for manipulating dates and times easily. You can format any date of Python (as long as it is a datetime object) using the strftime method. But first, you can get acquainted with the example django website to understand the working process of this framework, which is implemented in the most famous websites in the world.

Date formatting

A datetime object will have the method strftime that allows you to provide a custom format to a date and print it as a string wherever you need to. You can specify how and where every part of the date should be rendered with the following identifiers:

Format string Description
%a Locale’s abbreviated weekday name.
%A Locale’s full weekday name.
%b Locale’s abbreviated month name.
%B Locale’s full month name.
%c Locale’s appropriate date and time representation.
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%I Hour (12-hour clock) as a decimal number [01,12].
%j Day of the year as a decimal number [001,366].
%m Month as a decimal number [01,12].
%M Minute as a decimal number [00,59].
%p Locale’s equivalent of either AM or PM.
%S Second as a decimal number [00,61].
%U Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0.
%w Weekday as a decimal number [0(Sunday),6].
%W Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0.
%x Locale’s appropriate date representation.
%X Locale’s appropriate time representation.
%y Year without century as a decimal number [00,99].
%Y Year with century as a decimal number.
%Z Time zone name (no characters if no time zone exists).
%% A literal ‘%’ character.
Читайте также:  article

In the View

Within the controller, you have access directly to the datetime object. That means that you can simply execute the strftime function an pass the format string as first argument:

# -*- 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 >)

In the Template

If you are willing to format the string in the template and not in the view (controller), you can do it with a filter namely date. The following View (controller) returns a date object to a simple template that will print the date sent from the view:

# -*- 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', < 'myDate': myDate >)

The content of the following template ( index.html ) will use the following code to format the providen date object:

Prints something like: Aug. 27, 2017, 2:57 p.m. >

Источник

Datetime format python django

В дополнение к тегам Django также поддерживает фильтры, которые позволяют произвести некоторую простешую обработку значений внутри шаблонов. Полный список фильтров можно найти в документации. Здесь же рассмотрим только некоторые наиболее используемые.

add

Фильтр add добавляет к одному значению другое.

В данном случае определяется переменная message (это также могли бы быть данные, передаваемые из представления). Затем при выводе значения этой переменной к ней добавляется строка » Django»

Фильтр add в шаблонах Django

capfirst

Фильтр capfirst делает первую букву заглавной:

Например, если message равно «django», то послет применения фильтра на веб-странице будет выведено «Django».

cut

Фильтр cut удаляет из строки определенную подстроку:

В данном случае из строки «Я был дома» удаляется подстрока «был», поэтому шаблон выведет «Я дома»

Проверка значения и значение по умолчанию

Фильтр default проверяет значение, и если оно равно False, то возвращает некоторое значение по умолчанию.

В данном случае переменная isEnabled равна False, поэтому шаблон выведет «unabled»

Читайте также:  Java console application example

При этом сама переменная необязательно должна хранить именно True или False, это может быть любое выражение, которое можно привести в значению True/False. Например:

В данном случае переменная name представляет пустую строку, поэтому при применении фильтра получим False, а фильтр возвратит строку «Undefined».

Похожим действием обладает фильтр default_if_none — он возвращает значение по умолчанию, если переданное ему значение равно None :

floatformat

floatformat форматирует числа с плавающей точкой.

Если фильтру не передается аргумент, то число округляется до одного знака после запятой:

Фильтру можно передать числовой аргумент, который указывает, до скольких знаков после запятой надо округлять:

Если аргумент — отрицательное число, то число также округляется до определенного количества знака после запятой, однако нули при этом отсекуются:

Аргумент 0 позволяет округлить число до ближайщего целого:

Если аргумент имеет суффикс g , то применяется группировка с использованием разделителя разрядов в соответствии с текущей локалью:

При выводе применяется текущая локаль проекта. Например, если мы откроем файл settings.py , то можем там найти переменную LANGUAGE_CODE , которая определяет локаль:

По умолчанию применяется американский вариант английского языка и соответствующие им настройки локали. Соответственно разделителем между целой и дробной частью будет точка, а между разрядами — запятая. Но, например, изменим на русскоязычную культуру:

Если же необходимо отключить локализацию, аргументу добавляется суффикс u :

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

Фильтр date применяется к объекту datetime и в качестве аргумента получает следующие спецификаторы даты и времени:

  • d : день месяца в виде двух цифр (одна цифра дополняется нулем слева). Диапазон значений от ’01’ до ’31’
  • j : день месяца без дополнения нулем. Диапазон значений от ‘1’ до ’31’
  • D : день недели в текстовом виде в виде трех символов, например, ‘Fri’
  • l : день недели в полном виде, например, ‘Friday’
  • S : возвращает английский суффикс для порядковых числительных для дня месяца. Возможные значения: ‘st’ , ‘nd’ , ‘rd’ и ‘th’
  • w : номер деня недели. Значения в диапазоне от ‘0’ (воскресенье) до ‘6’ (суббота)
  • z : номер дня года. Диапазон значений от 1 до 366
  • W : номер недели года (первым днем недели считается понедельник). Значения от 1 до 53
  • m : номер месяца в виде двух цифр. Диапазон значений от ’01’ до ’12’
  • n : номер месяца в виде двух цифр без предварения нулем. Диапазон значений от ‘1’ до ’12’
  • M : текстовое значение месяца в виде трех символов. Например, ‘Jan’
  • b : текстовое значение месяца в виде трех символов в нижнем регистре. Например, ‘jan’
  • E : локализованное название месяца. Например, ‘августа’ («август» в родительном падеже)
  • F : полное название месяца. Например, ‘January’
  • N : аббревиатура месяца. Например, ‘Jan.’ , ‘Feb.’ , ‘March’ , ‘May’
  • t : число дней в текущем месяце. Значения от 28 до 31
  • y : двухчисловой код года с дополнением нулем. Диапазон значений от ’00’ до ’99’
  • Y : четырехчисловой код года с дополнением нулем. Диапазон значений от ‘0001’ до ‘9999’
  • L : является ли год високосным. Значения: True (является) и False (не является)
  • o : ISO-8601 week-numbering year,
  • g : час в 12-часовом формате без дополнения нулем. Диапазон значений от ‘1’ до ’12’
  • G : час в 24-часовом формате без дополнения нулем. Диапазон значений от ‘0’ до ’23’
  • h : час в 12-часовом формате с дополнением нулем. Диапазон значений от ’01’ до ’12’
  • H : час в 24-часовом формате с дополнением нулем. Диапазон значений от ’00’ до ’23’
  • i : минуты от ’00’ до ’59’
  • s : секунды от ’00’ до ’59’
  • u : микросекунды от 000000 до 999999
  • a : ‘a.m.’ или ‘p.m.’
  • A : ‘AM’ или ‘PM’
  • f : время в 12-часовом формате с минутами. Например, ‘1:30’
  • P : время в 12-часовом формате с минутами и «a.m.»/»p.m.». Например, ’12:30 p.m.’
  • e : часовая зона, например, » , ‘GMT’ , ‘-500’ , ‘US/Eastern’ , etc.
  • O : смещение в часах относительно гринвича. Например, ‘+0200’
  • T : временная зона текущего компьютера. ‘EST’ , ‘MDT’
  • c : дата и время в формате ISO 8601. Например, 2008-01-02T10:30:00.000123+02:00 или 2008-01-02T10:30:00.000123
  • r : дата и время в формает RFC 5322
Читайте также:  Умножение матриц python реализация

Также можно передать ряд предустановленных констант:

  • DATE_FORMAT
  • DATETIME_FORMAT
  • SHORT_DATE_FORMAT
  • SHORT_DATETIME_FORMAT

Например, в представлении в шаблон передается некоторая дата:

from datetime import datetime from django.shortcuts import render def index(request): return render(request, "index.html", context=)

Выведем эту дату в шаблоне:

фильтр date и форматирование времени и дат в шаблонах Django

Операции со списками

Ряд фильтров предназначены для работы со списками.

Фильтр join объединяет элементы списка, используя определенный разделитель:

Предположим, что здесь users — это список [«Tom», «Sam», «Bob», «Mike»] , то после применения фильтра получится строка «Tom, Sam, Bob, Mike».

Фильтр slice получает часть списка. Для извлечения часть списка он получает начальный и конечный индексы для извлечения элементов:

slice:"start:" slice:":end" slice:"start:end"

параметр start указывает на индекс элемента, начиная с которого надо скопировать элементы, а через параметр end передается индекс элемента, до которого нужно копировать список. Если start или end не указываются, то start по умолчанию равен 0, а end — на длину списка. Например

Здесб извлекаются элементы с 1 по 3 индекс (не включая), то есть получится список [«Sam», «Bob»] .

Фильтр length возвращает длину списка (также этот фильтр можно применять для нахождения длины строки).

Источник

Оцените статью