Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Django_-_podrobnoe_rukovodstvo

.pdf
Скачиваний:
373
Добавлен:
01.03.2016
Размер:
5 Мб
Скачать
☆

500

Приложение E. Встроенные шаблонные­ теги и фильтры

center

Центрирует значение в поле заданной ширины.

cut

Удаляет все значения arg из заданной строки, например:

{{ value|cut:” “}}

Если value равно “Строка с пробелами”, то будет выведено “Строкаспробелами”.

date

Форматирует дату согласно заданной строке формата (спецификаторы форматы такие же, как в теге {% now %}). Например:

{{ value|date:”D d M Y” }}

Если value – объект типа datetime (например, результат, возвращенный методом datetime.datetime.now()), то будет выведена строка вида ‘Wed 09 Jan 2008’.

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

{{ value|date }}

default

Если поданное на вход фильтра значение равно False, взять значение аргумента, иначе само фильтруемое значение. Например:

{{ value|default:”nothing” }}

Если value равно “” (пустая строка), будет выведено nothing.

default_if_none

Если (и только если) значение value равно None, взять значение аргумента, в противном случае – значение, поданное на вход фильтра.

Специально отметим, что если на вход фильтра будет подана пустая строка, то значение аргумента не используется. Для подмены пустых строк используйте фильтр default. Например:

{{ value|default_if_none:”nothing” }}

Если value равно None, будет выведено nothing.

dictsort

Принимает список словарей и возвращает его отсортированным по заданному в аргументе ключу, например:

Справочник по встроенным фильтрам

501

{{ value|dictsort:”name” }}

Если value равно:

[

{‘name’: ‘zed’, ‘age’: 19}, {‘name’: ‘amy’, ‘age’: 22}, {‘name’: ‘joe’, ‘age’: 31},

]

то будет выведено:

[

{‘name’: ‘amy’, ‘age’: 22}, {‘name’: ‘joe’, ‘age’: 31}, {‘name’: ‘zed’, ‘age’: 19},

]

dictsortreversed

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

divisibleby

Возвращает True, если значение делится на аргумент без остатка. Например:

{{ value|divisibleby:”3” }}

Если value равно 21, то результат равен True.

escape

Экранирует HTML-разметку. Точнее, производит следующие замены:

•• < преобразуется в <

•• > преобразуется в >

•• ' (одиночная кавычка) преобразуется в '

•• « (двойная кавычка) преобразуется в "

•• & преобразуется в &

Экранирование применяется только при выводе строки, поэтому не имеет значения, в каком месте цепочки фильтров стоит escape – он всегда применяется так, будто указан последним. Если требуется применить экранирование немедленно, используйте фильтр force_escape.

Применение escape к переменной, которая и без того подвергается автоматическому экранированию, не приводит к двойному экранированию. Поэтому этот фильтр можно без опасений использовать в режиме автоматического экранирования. Если требуется применить процеду-

502

Приложение E. Встроенные шаблонные­ теги и фильтры

ру экранирования к одному и тому же значению несколько раз, используйте фильтр force_escape.

escapejs

Экранирует символы в строках, предназначенных для использования в JavaScript-сценариях. Это не делает строку безопасной для включения в HTML-разметку, но предотвращает синтаксические ошибки при генерации JavaScript-сценариев или JSON-документов по шаблону­.

filesizeformat

Представляет величину размера файла в привычном формате (‘13 KB’, ‘4.1 MB’, ‘102 bytes’ и т. д.). Например:

{{ value|filesizeformat }}

Если value равно 123456789, то будет выведено 117.7 MB.

first

Возвращает первый элемент списка, например:

{{ value|first }}

Если значением value является список [‘a’, ‘b’, ‘c’], то будет выведено ‘a’.

fix_ampersands

Заменяет символы амперсанда компонентами &. Например:

{{ value|fix_ampersands }}

Если value равно Tom & Jerry, то будет выведено Tom & Jerry.

floatformat

При использовании без аргумента округляет число с плавающей запятой до числа с одним знаком после запятой (но только если дробная часть имеется). См. табл. E.4.

Таблица E.4. Примеры работы фильтра floatformat

Значение

Шаблон­

Выводится

 

 

 

34.23234

{{ value|floatformat }}

34.2

34.00000

{{ value|floatformat }}

34

34.26000

{{ value|floatformat }}

34.3

 

 

 

Если задан числовой аргумент, то floatformat округляет значение, интерпретируя аргумент как количество знаков после запятой. См. табл. E.5.

Справочник по встроенным фильтрам

503

Таблица E.5. Еще примеры работы фильтра floatformat

 

Значение

 

Шаблон­

 

Выводится

 

 

 

 

 

 

 

 

 

34.23234

 

{{ value|floatformat:3 }}

 

34.232

34.00000

 

{{ value|floatformat:3 }}

 

34.000

34.26000

 

{{ value|floatformat:3 }}

 

34.260

 

 

 

 

 

 

Если фильтру floatformat передать отрицательный аргумент, то значение будет округляться до указанного числа знаков после запятой, но только если дробная часть имеется. См. табл. E.6.

Таблица E.6. Еще примеры работы фильтра floatformat

Значение

Шаблон­

 

Выводится

 

 

 

 

34.23234

{{ value|floatformat:-3

}}

34.232

34.00000

{{ value|floatformat:-3

}}

34

34.26000

{{ value|floatformat:-3

}}

34.260

 

 

 

 

Вызов floatformat без аргумента эквивалентен вызову с аргументом -1.

force_escape

Экранирует HTML-разметку (подробнее см. описание фильтра escape). Этот фильтр применяется немедленно и сразу же возвращает экранированную строку. Полезно в тех редких случаях, когда требуется выполнить экранирование многократно или применить другие фильтры к уже экранированной строке. Обычно используется фильтр escape.

get_digit

Возвращает запрошенную цифру из заданного целого числа, где 1 обозначает самую правую цифру, 2 – вторую справа и т. д. Если входные данные некорректны (значение на входе фильтра или аргумент не являются целыми числами или аргумент меньше 1), то возвращает исходное значение. В противном случае результатом является целое число. Например:

{{ value|get_digit:”2” }}

Если value равно 123456789, то будет выведено 8.

iriencode

Преобразует интернационализированный идентификатор ресурса (Inter­ nationalized Resource Identifier – IRI) в строку, пригодную для включения в URL. Необходимо, когда требуется включить в URL строки, содер-

504

Приложение E. Встроенные шаблонные­ теги и фильтры

жащие не-ASCII символы. Этот фильтр можно без опасений применять к строке, которая уже была пропущена через фильтр urlencode.

join

Объединяет значения из заданного списка, разделяя их указанной строкой, как это делает метод Python str.join(list). Например:

{{ value|join:” // “ }}

Если значением value является список [‘a’, ‘b’, ‘c’], то будет выведена строка “a // b // c”.

last

Возвращает последний элемент списка, например:

{{ value|last }}

Если значением value является список [‘a’, ‘b’, ‘c’, ‘d’], то будет выведена строка “d”.

length

Возвращает длину значения (применим как к строкам, так и к спискам). Например:

{{ value|length }}

Если значением value является список [‘a’, ‘b’, ‘c’, ‘d’], то будет выведено 4.

length_is

Возвращает True, если длина значения совпадает с аргументом, иначе False. Например:

{{ value|length_is:”4” }}

Если значением value является список [‘a’, ‘b’, ‘c’, ‘d’], то будет выведено True.

linebreaks

Заменяет символы перевода строки в обычном тексте подходящими HTML-тегами; одиночный символ перевода строки замещается HTMLтегом разрыва строки (<br />), а символ перевода строки, за которым следует пустая строка, преобразуется в тег конца абзаца (</p>). Например:

{{ value|linebreaks }}

Если value равно Joel\nis a slug, то будет выведено <p>Joel<br />is a slug</p>.

Справочник по встроенным фильтрам

505

linebreaksbr

Преобразует все символы перевода строки в обычном тексте в HTMLтеги <br />.

linenumbers

Выводит текст с порядковыми номерами строк.

ljust

Выравнивает значение по левому краю в поле заданной ширины. Аргумент: размер поля

lower

Переводит строку в нижний регистр, например:

{{ value|lower }}

Если value равно Still MAD At Yoko, то будет выведено still mad at yoko.

make_list

Возвращает значение, преобразованное в список. Для целого числа это будет список составляющих его цифр, для строки – список символов. Например:

{{ value|make_list }}

Если value – строка “Joel”, то будет выведено [u’J’, u’o’, u’e’, u’l’]. Если value – число 123, то будет выведен список [1, 2, 3].

phone2numeric

Преобразует номер телефона (возможно, содержащий буквы) в числовой эквивалент. Например, ‘800-COLLECT’ преобразуется в ‘800-2655328’.

Входное значение не обязано быть допустимым номером телефона, фильтр с успехом преобразует любую строку.

pluralize

Возвращает суффикс множественного числа, если значение не равно 1. По умолчанию суффикс равен ‘s’. Например:

You have {{ num_messages }} message{{ num_messages|pluralize }}.

Если слово во множественном числе оканчивается не на ‘s’, можно задать альтернативный суффикс в виде аргумента фильтра. Например:

You have {{ num_walruses }} walrus{{ num_walrus|pluralize:”es” }}.

506

Приложение E. Встроенные шаблонные­ теги и фильтры

Если форма множественного числа образуется не путем добавления простого суффикса, то можно через запятую указать суффиксы единственного и множественного числа. Например:

You have {{ num_cherries }} cherr{{ num_cherries|pluralize:”y,ies” }}.

pprint

Обертка вокруг функции pprint.pprint из стандартной библиотеки Py- thon. Применяется для отладки.

random

Возвращает случайно выбранный элемент списка, например:

{{ value|random }}

Если значением value является список [‘a’, ‘b’, ‘c’, ‘d’], то может быть выведено “b”.

removetags

Удаляет перечисленные через запятую [X]HTML-теги. Например:

{{ value|removetags:”b span”|safe }}

Если value равно “<b>Joel</b> <button>is</button> a <span>slug</span>”, то будет выведено “Joel <button>is</button> a slug”.

rjust

Выравнивает значение по правому краю в поле заданной ширины. Аргумент: размер поля

safe

ПомечаетстрокукакнетребующуюдальнейшегоHTML-экранирования. Если автоматическое экранирование выключено, ничего не делает.

safeseq

Применяет фильтр safe к каждому элементу последовательности. Полезен в сочетании с другими фильтрами, воздействующими на последовательности, например:

{{some_list|safeseq|join:”, “ }}

Вданном случае применить фильтр safe непосредственно нельзя, так как он сначала преобразовал бы переменную в строку, а не воздействовал бы на каждый элемент последовательности.

Справочник по встроенным фильтрам

507

slice

Возвращает фрагмент списка.

Синтаксис такой же, как принят в языке Python для извлечения фраг-

ментов списка. См. http://diveintopython.org/native_data_types/lists. html#odbchelper.list.slice. Например:

{{ some_list|slice:”:2” }}

slugify

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

{{ value|slugify }}

Если value равно “Joel is a slug”, то будет выведено “joel-is-a-slug”.

stringformat

Форматирует значение переменной в соответствии со спецификатором формата в аргументе. Допустимы те же спецификаторы, что применяются в языке Python для форматирования строк, только начальный знак % опускается. О форматировании строк в Python см. http://docs.python.org/ library/stdtypes.html#string-formatting-operations. Например:

{{ value|stringformat:”s” }}

Если value равно “Joel is a slug”, то будет выведено “Joel is a slug”.

striptags

Удаляет все [X]HTML-теги. Например:

{{ value|striptags }}

Если value равно “<b>Joel</b> <button>is</button> a <span>slug</span>”, то будет выведено “Joel is a slug”.

time

Форматирует время согласно заданной строке формата (спецификаторы форматы такие же, как в теге {% now %}). Фильтр time принимает спецификаторы, относящиеся ко времени дня, но не к дате (по очевидным причинам). Для форматирования даты пользуйтесь фильтром date. Например:

{{ value|time:”H:i” }}

508

Приложение E. Встроенные шаблонные­ теги и фильтры

Если value – объект datetime.datetime.now(), то будет выведена строка вида “01:23”. Если строка формата не задана, то по умолчанию используется значение параметра TIME_FORMAT:

{{ value|time }}

timesince

Выводит дату в виде истекшего промежутка времени (например «4 days,

6hours»).

Вкачестве необязательного аргумента принимает переменную, содержащую дату, до которой отсчитывается промежуток (без аргумента промежуток отсчитывается до текущего момента времени). Например, если blog_date – полночь 1 июня 2006 года, comment_date – 08:00 1 июня 2006 года, то {{ blog_date|timesince:comment_date }} вернет «8 hours».

При сравнении дат, заданных с учетом и без учета часового пояса, возвращается пустая строка. Минимальная единица округления – минута. Если точка отсчета находится в будущем относительно переданного аргумента, возвращается строка “0 minutes”.

timeuntil

Аналогичен timesince, но промежуток времени измеряется от текущего момента до момента в будущем, заданного объектом типа date или datetime. Например, если сегодня 1 июня 2006 года, а conference_date – 29 июня 2006 года, то {{ conference_date|timeuntil }} вернет строку “4 weeks”.

В качестве необязательного аргумента принимает переменную, содержащую дату, от которой отсчитывается промежуток (без аргумента промежуток отсчитывается от текущего момента времени). Например, если blog_date – полночь 22 июня 2006 года, то {{ conference_ date|timeuntil:from_date }} вернет “1 week”.

При сравнении дат, заданных с учетом и без учета часового пояса, возвращается пустая строка. Минимальная единица округления – минута. Если точка отсчета находится в прошлом относительно переданного аргумента, возвращается строка “0 minutes”.

title

Возвращает строку, в которой начальные буквы каждого слова преобразованы в верхний регистр.

truncatewords

Обрезает строку после заданного числа слов. Аргумент: количество оставляемых слов.

Справочник по встроенным фильтрам

509

Например:

{{ value|truncatewords:2 }}

Если value равно “Joel is a slug”, то будет выведено “Joel is ...”.

truncatewords_html

Аналогичен truncatewords, но учитывает HTML-теги. Теги, которые были открыты в данной строке и не закрыты до точки обрезания, закрываются сразу же после обрезания.

Этот фильтр менее эффективен, чем truncatewords, поэтому использовать его следует только для HTML-текста.

unordered_list

Принимает вложенный список и возвращает маркированный HTMLсписок без открывающего и закрывающего тегов <ul>.

Предполагается, что список задан корректно. Например, если var содержит список [‘Штаты’, [‘Канзас’, [‘Лоуренс’, ‘Топека’], ‘Иллинойс’]], то {{ var|unordered_list }} вернет такую HTML-разметку:

<li>Штаты

<ul>

<li>Канзас

<ul>

<li>Лоуренс</li>

<li>Топека</li>

</ul>

</li>

<li>Иллинойс</li>

</ul>

</li>

upper

Преобразует строку в верхний регистр, например:

{{ value|upper }}

Если value равно “Joel is a slug”, то будет выведено “JOEL IS A SLUG”.

urlencode

Экранирует значения для вставки в URL.

urlize

Преобразует адреса URL из простого текста в гиперссылки.