Утилиты Django¶
Этот документ охватывает все стабильные модули в django.utils
. Большинство модулей в django.utils
предназначены для внутреннего использования, и только следующие части могут считаться стабильными и, следовательно, обратно совместимыми в соответствии с internal release deprecation policy.
django.utils.cache
¶
Этот модуль содержит вспомогательные функции для управления кэшированием HTTP. Для этого он управляет заголовком Vary
в ответах. Он включает функции для прямого исправления заголовка объектов ответа и декораторы, которые изменяют функции для самостоятельного исправления заголовка.
Информацию о заголовке Vary
см. в разделе RFC 9110#section-12.5.5.
По сути, HTTP-заголовок Vary
определяет, какие заголовки кэш должен учитывать при построении ключа кэша. Запросы с одинаковым путем, но разным содержанием заголовков, указанных в Vary
>, должны получить разные ключи кэша, чтобы предотвратить доставку неверного содержимого.
Например, промежуточное ПО internationalization должно различать кэши по заголовку Accept-language
.
-
patch_cache_control
(response, **kwargs)¶ Эта функция исправляет заголовок
Cache-Control
, добавляя к нему все аргументы ключевых слов. Преобразование происходит следующим образом:- Все имена параметров ключевых слов переводятся в нижний регистр, а символы подчеркивания преобразуются в дефисы.
- Если значение параметра равно
True
(именноTrue
, а не просто истинное значение), в заголовок добавляется только имя параметра. - Все остальные параметры добавляются со своим значением, после применения к нему
str()
.
-
get_max_age
(response)¶ Возвращает max-age из заголовка Cache-Control ответа в виде целого числа (или
None
, если оно не найдено или не является целым числом).
-
patch_response_headers
(response, cache_timeout=None)¶ Добавляет некоторые полезные заголовки к данному объекту
HttpResponse
:Expires
Cache-Control
Каждый заголовок добавляется только в том случае, если он еще не установлен.
cache_timeout
указывается в секундах. По умолчанию используется значениеCACHE_MIDDLEWARE_SECONDS
.
-
add_never_cache_headers
(response)¶ Добавляет заголовок
Expires
к текущей дате/времени.Добавляет заголовок
Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private
к ответу, чтобы указать, что страница никогда не должна кэшироваться.Каждый заголовок добавляется только в том случае, если он еще не установлен.
-
patch_vary_headers
(response, newheaders)¶ Добавляет (или обновляет) заголовок
Vary
в заданный объектHttpResponse
.newheaders
- это список имен заголовков, которые должны быть вVary
. Если headers содержит звездочку, то заголовокVary
будет состоять из одной звездочки'*'
, согласно RFC 9110#section-12.5.5. В противном случае существующие заголовки вVary
не удаляются.
-
get_cache_key
(request, key_prefix=None, method='GET', cache=None)¶ Возвращает ключ кэша на основе пути запроса. Его можно использовать на этапе запроса, поскольку он извлекает список заголовков, которые необходимо учитывать, из глобального реестра путей и использует их для создания ключа кэша для проверки.
Если список заголовков не сохранен, страницу необходимо перестроить, поэтому эта функция возвращает
None
.
-
learn_cache_key
(request, response, cache_timeout=None, key_prefix=None, cache=None)¶ Узнает, какие заголовки следует учитывать для некоторого пути запроса из объекта ответа. Он хранит эти заголовки в глобальном реестре путей, чтобы при последующем обращении к этому пути знать, какие заголовки следует учитывать, не создавая сам объект ответа. Заголовки именуются в заголовке
Vary
ответа, но мы хотим предотвратить генерацию ответа.Список заголовков, используемых для генерации ключа кэша, хранится в том же кэше, что и сами страницы. Если кэш старит некоторые данные из кэша, это означает, что мы должны построить ответ один раз, чтобы получить заголовок Vary и список заголовков для использования в качестве ключа кэша.
django.utils.dateparse
¶
Функции, определенные в этом модуле, обладают следующими свойствами:
- Они принимают строки в форматах даты/времени ISO 8601 (или некоторые близкие альтернативы) и возвращают объекты из соответствующих классов модуля Python
datetime
. - Они поднимают
ValueError
, если их ввод хорошо отформатирован, но не является действительной датой или временем. - Они возвращают
None
, если он вообще плохо отформатирован. - Они принимают входные данные с разрешением до пикосекунд, но усекают их до микросекунд, поскольку именно это поддерживает Python.
-
parse_date
(value)¶ Разбирает строку и возвращает
datetime.date
.
-
parse_time
(value)¶ Разбирает строку и возвращает
datetime.time
.Смещение по UTC не поддерживается; если
value
описывает один, результатом будетNone
.
-
parse_datetime
(value)¶ Разбирает строку и возвращает
datetime.datetime
.Поддерживаются смещения UTC; если
value
описывает один, то атрибут результатаtzinfo
является экземпляромdatetime.timezone
.
-
parse_duration
(value)¶ Разбирает строку и возвращает
datetime.timedelta
.Ожидает данные в формате
"DD HH:MM:SS.uuuuuu"
,"DD HH:MM:SS,uuuuuu"
, или как указано в ISO 8601 (например,P4DT1H15M20S
, что эквивалентно4 1:15:20
) или в формате дневного интервала PostgreSQL (например,3 days 04:05:06
).
django.utils.decorators
¶
-
method_decorator
(decorator, name='')¶ Преобразует декоратор функций в декоратор методов. Он может использоваться для декорирования методов или классов; в последнем случае
name
является именем декорируемого метода и является обязательным.decorator
также может быть списком или кортежем функций. Они обертываются в обратном порядке, так что порядок вызова соответствует порядку появления функций в списке/кортеже.Пример использования см. в decorating class based views.
-
decorator_from_middleware
(middleware_class)¶ Учитывая класс промежуточного ПО, возвращает декоратор представления. Это позволяет вам использовать функциональность промежуточного ПО на основе каждого представления. Промежуточное ПО создается без передачи параметров.
Он предполагает наличие промежуточного программного обеспечения, совместимого со старым стилем Django 1.9 и более ранних версий (с методами типа
process_request()
,process_exception()
иprocess_response()
).
-
decorator_from_middleware_with_args
(middleware_class)¶ Подобно
decorator_from_middleware
, но возвращает функцию, которая принимает аргументы, передаваемые классу middleware_class. Например, декораторcache_page()
создается из декоратораCacheMiddleware
следующим образом:cache_page = decorator_from_middleware_with_args(CacheMiddleware) @cache_page(3600) def my_view(request): pass
-
sync_only_middleware
(middleware)¶ Помечает промежуточное ПО как synchronous-only. (По умолчанию в Django, но это позволяет вам защититься на будущее, если значение по умолчанию изменится в будущем релизе).
-
async_only_middleware
(middleware)¶ Помечает промежуточное ПО как asynchronous-only. Django обернет его в асинхронный цикл событий, когда он будет вызван из пути запроса WSGI.
-
sync_and_async_middleware
(middleware)¶ Помечает промежуточное ПО как sync and async compatible, что позволяет избежать преобразования запросов. Для использования этого декоратора необходимо реализовать определение текущего типа запроса. Подробности смотрите в разделе asynchronous middleware documentation.
django.utils.encoding
¶
-
smart_str
(s, encoding='utf-8', strings_only=False, errors='strict')¶ Возвращает объект
str
, представляющий произвольный объектs
. Обрабатывает байтовые строки, используя кодекencoding
.Если
strings_only
равноTrue
, не конвертируйте (некоторые) нестрокоподобные объекты.
-
is_protected_type
(obj)¶ Определите, является ли экземпляр объекта защищенным типом.
Объекты защищенных типов сохраняются как есть при передаче в
force_str(strings_only=True)
.
-
force_str
(s, encoding='utf-8', strings_only=False, errors='strict')¶ Аналогично
smart_str()
, за исключением того, что экземпляры lazy разрешаются в строки, а не сохраняются как объекты lazy.Если
strings_only
равноTrue
, не конвертируйте (некоторые) нестрокоподобные объекты.
-
smart_bytes
(s, encoding='utf-8', strings_only=False, errors='strict')¶ Возвращает байтовую версию произвольного объекта
s
, закодированную так, как указано вencoding
.Если
strings_only
равноTrue
, не конвертируйте (некоторые) нестрокоподобные объекты.
-
force_bytes
(s, encoding='utf-8', strings_only=False, errors='strict')¶ Аналогично
smart_bytes
, за исключением того, что экземпляры lazy разрешаются в байтовые строки, а не сохраняются как объекты lazy.Если
strings_only
равноTrue
, не конвертируйте (некоторые) нестрокоподобные объекты.
-
iri_to_uri
(iri)¶ Преобразование части интернационализированного идентификатора ресурса (IRI) в часть URI, которая подходит для включения в URL.
Это алгоритм из раздела 3.1 RFC 3987#section-3.1, немного упрощенный, поскольку предполагается, что входные данные являются строкой, а не произвольным потоком байтов.
Принимает IRI (строку или байты UTF-8) и возвращает строку, содержащую закодированный результат.
-
uri_to_iri
(uri)¶ Преобразует унифицированный идентификатор ресурса в интернационализированный идентификатор ресурса.
Это алгоритм из раздела 3.2 книги RFC 3987#section-3.2.
Принимает URI в байтах ASCII и возвращает строку, содержащую закодированный результат.
-
filepath_to_uri
(path)¶ Преобразование пути файловой системы в часть URI, пригодную для включения в URL. Предполагается, что путь представляет собой либо байт UTF-8, либо строку, либо
Path
.Этот метод кодирует определенные символы, которые обычно распознаются как специальные символы для URI. Обратите внимание, что этот метод не кодирует символ „, так как он является допустимым символом в URI. Более подробную информацию см. в функции JavaScript
encodeURIComponent()
.Возвращает строку ASCII, содержащую закодированный результат.
-
escape_uri_path
(path)¶ Удаляет небезопасные символы из части пути унифицированного идентификатора ресурса (URI).
django.utils.feedgenerator
¶
Пример использования:
>>> from django.utils import feedgenerator
>>> feed = feedgenerator.Rss201rev2Feed(
... title="Poynter E-Media Tidbits",
... link="https://www.poynter.org/tag/e-media-tidbits/",
... description="A group blog by the sharpest minds in online media/journalism/publishing.",
... language="en",
... )
>>> feed.add_item(
... title="Hello",
... link="https://www.holovaty.com/test/",
... description="Testing.",
... )
>>> with open("test.rss", "w") as fp:
... feed.write(fp, "utf-8")
...
Для упрощения выбора генератора используйте feedgenerator.DefaultFeed
, который в настоящее время является Rss201rev2Feed
Определения различных версий RSS см. на сайте: https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rss
-
get_tag_uri
(url, date)¶ Создает TagURI.
См. https://web.archive.org/web/20110514113830/http://diveintomark.org/archives/2004/05/28/howto-atom-id
Stylesheet
¶
-
class
Stylesheet
(url, mimetype='', media='screen')¶ Представляет собой таблицу стилей RSS.
-
url
¶ Обязательный аргумент. URL-адрес, по которому находится таблица стилей.
-
mimetype
¶ Необязательная строка, содержащая MIME-тип таблицы стилей. Если он не указан, Django попытается угадать его, используя Python
mimetypes.guess_type()
. Используйтеmimetype=None
, если вы не хотите, чтобы в вашей таблице стилей был указан тип MIME.
-
media
¶ Необязательная строка, которая будет использоваться в качестве атрибута
media
таблицы стилей. По умолчанию используется значение"screen"
. Используйтеmedia=None
, если вы не хотите, чтобы в вашей таблице стилей был атрибутmedia
.
-
SyndicationFeed
¶
-
class
SyndicationFeed
¶ Базовый класс для всех фидов синдикации. Подклассы должны предоставлять
write()
.-
__init__
(title, link, description, language=None, author_email=None, author_name=None, author_link=None, subtitle=None, categories=None, feed_url=None, feed_copyright=None, feed_guid=None, ttl=None, stylesheets=None, **kwargs)¶ Инициализация фида с заданным словарем метаданных, который применяется ко всему фиду.
Любые дополнительные аргументы ключевых слов, которые вы передадите в
__init__
, будут сохранены вself.feed
.Все параметры должны быть строковыми, за исключением двух:
categories
должна быть последовательностью строк.stylesheets
должно быть последовательностью либо строк, либо экземпляровStylesheet
.
Changed in Django 5.2:Был добавлен аргумент
stylesheets
.
-
add_item
(title, link, description, author_email=None, author_name=None, author_link=None, pubdate=None, comments=None, unique_id=None, categories=(), item_copyright=None, ttl=None, updateddate=None, enclosures=None, **kwargs)¶ Добавляет элемент в ленту. Все аргументы должны быть строками, кроме
pubdate
иupdateddate
, которые являютсяdatetime.datetime
объектами, иenclosures
, который является спискомEnclosure
экземпляров.
-
num_items
()¶
-
root_attributes
()¶ Возвращает дополнительные атрибуты для размещения на корневом (т.е. feed/channel) элементе. Вызывается из
write()
.
-
add_root_elements
(handler)¶ Добавляет элементы в корневой (т.е. feed/channel) элемент. Вызывается из
write()
.
-
add_stylesheets
(self, handler)¶ - New in Django 5.2.
Добавьте в документ информацию о таблице стилей. Вызывается из
write()
.
-
item_attributes
(item)¶ Возвращает дополнительные атрибуты для размещения на каждом элементе элемента (т.е. элемента/записи).
-
add_item_elements
(handler, item)¶ Добавьте элементы на каждый элемент (т.е. элемент/запись).
-
write
(outfile, encoding)¶ Выводит фид в заданной кодировке в
outfile
, который является файлоподобным объектом. Подклассы должны переопределить это.
-
writeString
(encoding)¶ Возвращает подачу в заданной кодировке в виде строки.
-
latest_post_date
()¶ Возвращает последние
pubdate
илиupdateddate
для всех элементов в фиде. Если ни один элемент не имеет ни одного из этих атрибутов, возвращается текущая дата/время UTC.
-
Rss201rev2Feed
¶
-
class
Rss201rev2Feed
(RssFeed)¶ Спецификация: https://cyber.harvard.edu/rss/rss.html
RssUserland091Feed
¶
-
class
RssUserland091Feed
(RssFeed)¶ Спецификация: http://backend.userland.com/rss091
django.utils.functional
¶
-
class
cached_property
(func)¶ Декоратор
@cached_property
кэширует результат метода с одним аргументомself
в качестве свойства. Кэшированный результат будет сохраняться до тех пор, пока существует экземпляр, поэтому если экземпляр будет передан, а функция впоследствии вызвана, будет возвращен кэшированный результат.Рассмотрим типичный случай, когда представлению может понадобиться вызвать метод модели для выполнения некоторых вычислений, прежде чем поместить экземпляр модели в контекст, где шаблон может вызвать метод еще раз:
# the model class Person(models.Model): def friends(self): # expensive computation ... return friends # in the view: if person.friends(): ...
И в шаблоне у вас будет:
{% for friend in person.friends %}
Здесь
friends()
будет вызван дважды. Поскольку экземплярperson
в представлении и шаблоне один и тот же, украшение методаfriends()
методом@cached_property
позволяет избежать этого:from django.utils.functional import cached_property class Person(models.Model): @cached_property def friends(self): ...
Обратите внимание, что поскольку метод теперь является свойством, в коде Python к нему нужно будет обращаться соответствующим образом:
# in the view: if person.friends: ...
Кэшированное значение может рассматриваться как обычный атрибут экземпляра:
# clear it, requiring re-computation next time it's called person.__dict__.pop("friends", None) # set a value manually, that will persist on the instance until cleared person.friends = ["Huckleberry Finn", "Tom Sawyer"]
Из-за того, как работает descriptor protocol, использование
del
(илиdelattr
) наcached_property
, к которому не было доступа, вызываетAttributeError
.Помимо потенциальных преимуществ в производительности,
@cached_property
может гарантировать, что значение атрибута не изменится неожиданно в течение жизни экземпляра. Это может произойти с методом, вычисления которого основаны наdatetime.now()
, или если изменение было сохранено в базе данных каким-либо другим процессом в короткий промежуток времени между последующими вызовами метода для одного и того же экземпляра.Вы можете сделать кэшированные свойства методов. Например, если у вас есть дорогой метод
get_friends()
и вы хотите разрешить вызывать его без получения кэшированного значения, вы можете написать:friends = cached_property(get_friends)
В то время как
person.get_friends()
будет пересчитывать друзей при каждом вызове, значение кэшированного свойства будет сохраняться до тех пор, пока вы не удалите его, как описано выше:x = person.friends # calls first time y = person.get_friends() # calls again z = person.friends # does not call x is z # is True
-
class
classproperty
(method=None)¶ Подобно
@classmethod
, декоратор@classproperty
преобразует результат метода с одним аргументомcls
в свойство, доступ к которому можно получить непосредственно из класса.
-
keep_lazy
(func, *resultclasses)¶ Django предлагает множество служебных функций (особенно в
django.utils
), которые принимают строку в качестве первого аргумента и что-то делают с этой строкой. Эти функции используются фильтрами шаблонов, а также непосредственно в другом коде.Если вы пишете свои собственные подобные функции и работаете с переводами, вы столкнетесь с проблемой, что делать, когда первым аргументом является объект ленивого перевода. Вы не хотите сразу преобразовывать его в строку, потому что вы можете использовать эту функцию вне представления (и, следовательно, настройки локали текущего потока будут неверными).
Для подобных случаев используйте декоратор
django.utils.functional.keep_lazy()
. Он изменяет функцию таким образом, что если она вызывается с ленивым переводом в качестве одного из аргументов, оценка функции задерживается до тех пор, пока не потребуется преобразование в строку.Например:
from django.utils.functional import keep_lazy, keep_lazy_text def fancy_utility_function(s, *args, **kwargs): # Do some conversion on string 's' ... fancy_utility_function = keep_lazy(str)(fancy_utility_function) # Or more succinctly: @keep_lazy(str) def fancy_utility_function(s, *args, **kwargs): ...
Декоратор
keep_lazy()
принимает ряд дополнительных аргументов (*args
), определяющих тип(ы), которые может возвращать исходная функция. Чаще всего используются функции, возвращающие текст. Для них можно передать типstr
вkeep_lazy
(или использовать декораторkeep_lazy_text()
, описанный в следующем разделе).Использование этого декоратора означает, что вы можете написать свою функцию и предположить, что входные данные являются правильной строкой, а затем добавить поддержку объектов ленивого перевода в конце.
-
keep_lazy_text
(func)¶ Сокращение для
keep_lazy(str)(func)
.Если у вас есть функция, возвращающая текст, и вы хотите иметь возможность принимать ленивые аргументы, откладывая их оценку, вы можете использовать этот декоратор:
from django.utils.functional import keep_lazy, keep_lazy_text # Our previous example was: @keep_lazy(str) def fancy_utility_function(s, *args, **kwargs): ... # Which can be rewritten as: @keep_lazy_text def fancy_utility_function(s, *args, **kwargs): ...
django.utils.html
¶
Обычно вы должны создавать HTML с помощью шаблонов Django, чтобы использовать его механизм автоэскейпа, используя утилиты из django.utils.safestring
, где это необходимо. Этот модуль предоставляет некоторые дополнительные низкоуровневые утилиты для экранирования HTML.
-
escape
(text)¶ Возвращает заданный текст с амперсандами, кавычками и угловыми скобками, закодированный для использования в HTML. Входной текст сначала принудительно преобразуется в строку, а на выходе применяется
mark_safe()
.
-
conditional_escape
(text)¶ Аналогичен
escape()
, за исключением того, что он не работает со строками с предварительной эскейпированной строкой, поэтому он не будет выполнять двойную эскейпировку.
-
format_html
(format_string, *args, **kwargs)¶ Он аналогичен
str.format()
, за исключением того, что подходит для построения HTML-фрагментов. Первый аргументformat_string
не экранируется, но все остальные аргументы и kwargs проходят черезconditional_escape()
перед передачей вstr.format()
. Наконец, на выходе применяетсяmark_safe()
.В случае построения небольших HTML-фрагментов эта функция предпочтительнее интерполяции строк с помощью
%
илиstr.format()
напрямую, поскольку она применяет экранирование ко всем аргументам - так же, как система шаблонов применяет экранирование по умолчанию.Поэтому вместо того, чтобы написать:
mark_safe( "%s <b>%s</b> %s" % ( some_html, escape(some_text), escape(some_other_text), ) )
Вместо этого следует использовать:
format_html( "{} <b>{}</b> {}", mark_safe(some_html), some_text, some_other_text, )
Это имеет то преимущество, что вам не нужно применять
escape()
к каждому аргументу и рисковать ошибкой и XSS-уязвимостью, если вы забудете один из них.Обратите внимание, что хотя эта функция использует
str.format()
для интерполяции, некоторые опции форматирования, предоставляемыеstr.format()
(например, форматирование чисел), не будут работать, поскольку все аргументы передаются черезconditional_escape()
, который (в конечном итоге) вызываетforce_str()
для значений.Не рекомендуется, начиная с версии 5.0: Поддержка вызова
format_html()
без передачи args или kwargs устарела.
-
format_html_join
(sep, format_string, args_generator)¶ Обертка
format_html()
, для распространенного случая группы аргументов, которые должны быть отформатированы с использованием одной и той же строки формата, а затем объединены с помощьюsep
.sep
также передается черезconditional_escape()
.args_generator
должен быть итератором, который выдает аргументы для передачи вformat_html()
, либо последовательности позиционных аргументов, либо сопоставления аргументов ключевых слов.Например, кортежи можно использовать для позиционных аргументов:
format_html_join( "\n", "<li>{} {}</li>", ((u.first_name, u.last_name) for u in users), )
Или словари могут быть использованы для аргументации ключевых слов:
format_html_join( "\n", '<li data-id="{id}">{id} {title}</li>', ({"id": b.id, "title": b.title} for b in books), )
Changed in Django 5.2:Добавлена поддержка сопоставлений в
args_generator
.
-
json_script
(value, element_id=None, encoder=None)¶ Экранирует все специальные символы HTML/XML с помощью их эскейпов Unicode, поэтому значение безопасно для использования в JavaScript. Кроме того, экранированный JSON заворачивается в тег
<script>
. Если параметрelement_id
не являетсяNone
, то тегу<script>
присваивается переданный идентификатор. Например:>>> json_script({"hello": "world"}, element_id="hello-data") '<script id="hello-data" type="application/json">{"hello": "world"}</script>'
Энкодер, по умолчанию :class:django.core.serializers.json.DjangoJSONEncoder, будет использоваться для сериализации данных. Смотрите JSON сериализация для получения дополнительных сведений об этом сериализаторе.
-
strip_tags
(value)¶ Пытается удалить из строки все, что похоже на HTML-тег, то есть все, что содержится в пределах
<>
.Абсолютно НИКАКИХ гарантий того, что полученная строка будет безопасна для HTML. Поэтому НИКОГДА не помечайте безопасным результат вызова
strip_tag
, не экранировав его сначала, например, с помощьюescape()
.Например:
strip_tags(value)
Если
value
равно"<b>Joel</b> <button>is</button> a <span>slug</span>"
, то возвращаемое значение будет"Joel is a slug"
.Если вы ищете более надежное решение, рассмотрите возможность использования сторонних средств санации HTML.
-
html_safe
()¶ Метод
__html__()
для класса помогает шаблонам не-Django обнаружить классы, вывод которых не требует экранирования HTML.Этот декоратор определяет метод
__html__()
на декорируемом классе, обернув__str__()
вmark_safe()
. Убедитесь, что метод__str__()
действительно возвращает текст, не требующий экранирования HTML.
django.utils.http
¶
-
urlencode
(query, doseq=False)¶ Версия функции Python
urllib.parse.urlencode()
, которая может работать сMultiValueDict
и нестроковыми значениями.
-
http_date
(epoch_seconds=None)¶ Форматирует время в соответствии с форматом даты RFC 1123#section-5.2.14, указанным в HTTP RFC 9110#section-5.6.7.
Принимает число с плавающей точкой, выраженное в секундах от эпохи в UTC - такое, как выводится
time.time()
. Если установлено значениеNone
, по умолчанию используется текущее время.Выводит строку в формате
Wdy, DD Mon YYYY HH:MM:SS GMT
.
-
content_disposition_header
(as_attachment, filename)¶ Конструирует значение
Content-Disposition
HTTP-заголовка из заданногоfilename
, указанного RFC 6266. ВозвращаетNone
, еслиas_attachment
равноFalse
иfilename
равноNone
, в противном случае возвращает строку, подходящую дляContent-Disposition
HTTP-заголовка.
-
base36_to_int
(s)¶ Преобразует строку с основанием 36 в целое число.
-
int_to_base36
(i)¶ Преобразует целое положительное число в строку по основанию 36.
-
urlsafe_base64_encode
(s)¶ Кодирует байтовую строку в строку base64 для использования в URL-адресах, удаляя все идущие следом знаки равенства.
-
urlsafe_base64_decode
(s)¶ Декодирует строку в кодировке base64, добавляя обратно все отстающие знаки равенства, которые могли быть удалены.
django.utils.module_loading
¶
Функции для работы с модулями Python.
-
import_string
(dotted_path)¶ Импортирует точечный путь к модулю и возвращает атрибут/класс, обозначенный последним именем в пути. Возвращает
ImportError
, если импорт не удался. Например:from django.utils.module_loading import import_string ValidationError = import_string("django.core.exceptions.ValidationError")
эквивалентно:
from django.core.exceptions import ValidationError
django.utils.safestring
¶
Функции и классы для работы с «безопасными строками»: строки, которые можно безопасно отображать без дальнейшей экранировки в HTML. Пометка чего-либо как «безопасной строки» означает, что производитель строки уже превратил символы, которые не должны интерпретироваться механизмом HTML (например, „<“), в соответствующие сущности.
-
class
SafeString
¶ Подкласс
str
, который был специально помечен как «безопасный» (не требующий дополнительного экранирования) для целей вывода HTML.
-
mark_safe
(s)¶ Явно пометить строку как безопасную для вывода (HTML). Возвращаемый объект можно использовать везде, где уместна строка.
Может вызываться несколько раз для одной строки.
Может также использоваться в качестве декоративного элемента.
Для построения фрагментов HTML обычно следует использовать
django.utils.html.format_html()
.Строка, помеченная как безопасная, при изменении снова станет небезопасной. Например:
>>> mystr = "<b>Hello World</b> " >>> mystr = mark_safe(mystr) >>> type(mystr) <class 'django.utils.safestring.SafeString'> >>> mystr = mystr.strip() # removing whitespace >>> type(mystr) <type 'str'>
django.utils.text
¶
-
format_lazy
(format_string, *args, **kwargs)¶ Версия
str.format()
для случаев, когдаformat_string
,args
и/илиkwargs
содержат ленивые объекты. Первым аргументом является строка, которую нужно отформатировать. Например:from django.utils.text import format_lazy from django.utils.translation import pgettext_lazy urlpatterns = [ path( format_lazy("{person}/<int:pk>/", person=pgettext_lazy("URL", "person")), PersonDetailView.as_view(), ), ]
Этот пример позволяет переводчикам переводить часть URL. Если «person» переводится на «persona», то регулярное выражение будет соответствовать
persona/(?P<pk>\d+)/$
, напримерpersona/5/
.
-
slugify
(value, allow_unicode=False)¶ Преобразует строку в URL slug by:
- Преобразование в ASCII, если
allow_unicode
равноFalse
(по умолчанию). - Преобразование в нижний регистр.
- Удаление символов, не являющихся алфавитно-цифровыми, подчеркиваниями, дефисами или пробелами.
- Замена пробелов и повторяющихся тире одиночными тире.
- Удаление ведущих и последующих пробелов, тире и знаков подчеркивания.
Например:
>>> slugify(" Joel is a slug ") 'joel-is-a-slug'
Если необходимо разрешить символы Unicode, передайте
allow_unicode=True
. Например:>>> slugify("你好 World", allow_unicode=True) '你好-world'
- Преобразование в ASCII, если
django.utils.timezone
¶
-
get_fixed_timezone
(offset)¶ Возвращает экземпляр
tzinfo
, представляющий часовой пояс с фиксированным смещением от UTC.offset
- этоdatetime.timedelta
или целое число минут. Используйте положительные значения для часовых поясов к востоку от UTC и отрицательные - к западу от UTC.
-
get_default_timezone
()¶ Возвращает экземпляр
tzinfo
, который представляет default time zone.
-
get_default_timezone_name
()¶ Возвращает имя default time zone.
-
get_current_timezone
()¶ Возвращает экземпляр
tzinfo
, который представляет current time zone.
-
get_current_timezone_name
()¶ Возвращает имя current time zone.
-
activate
(timezone)¶ Устанавливает значение current time zone. Аргумент
timezone
должен быть экземпляром подклассаtzinfo
или именем часового пояса.
-
deactivate
()¶ Сбрасывает значение current time zone.
-
override
(timezone)¶ Это менеджер контекста Python, который устанавливает current time zone при входе с
activate()
, а при выходе восстанавливает ранее активный часовой пояс. Если аргументомtimezone
являетсяNone
, то при входе вместо current time zone устанавливаетсяdeactivate()
.override
также можно использовать в качестве декоратора функций.
-
localtime
(value=None, timezone=None)¶ Преобразует известное
datetime
в другой часовой пояс, по умолчанию current time zone.Если значение
value
опущено, по умолчанию оно равноnow()
.Эта функция не работает для наивных дат; вместо нее используйте
make_aware()
.
-
localdate
(value=None, timezone=None)¶ Использует
localtime()
для преобразования известногоdatetime
вdate()
в другом часовом поясе, по умолчанию current time zone.Если значение
value
опущено, по умолчанию оно равноnow()
.Эта функция не работает с наивными датами.
-
now
()¶ Возвращает значение
datetime
, которое представляет текущий момент времени. Что именно возвращается, зависит от значенияUSE_TZ
:- Если
USE_TZ
равноFalse
, то это будет naive datetime (т.е. время без связанного часового пояса), которое представляет текущее время в локальном часовом поясе системы. - Если
USE_TZ
равноTrue
, это будет aware datetime, представляющее текущее время в UTC. Обратите внимание, чтоnow()
всегда будет возвращать время в UTC независимо от значенияTIME_ZONE
; вы можете использоватьlocaltime()
для получения времени в текущем часовом поясе.
- Если
-
is_aware
(value)¶ Возвращает
True
, еслиvalue
осознан,False
, если наивен. Эта функция предполагает, чтоvalue
являетсяdatetime
.
-
is_naive
(value)¶ Возвращает
True
, еслиvalue
является наивным,False
, если он осведомлен. Эта функция предполагает, чтоvalue
являетсяdatetime
.
-
make_aware
(value, timezone=None)¶ Возвращает осознанный
datetime
, который представляет тот же момент времени, что иvalue
вtimezone
,value
являющийся наивнымdatetime
. Еслиtimezone
заданоNone
, то по умолчанию возвращается current time zone.
-
make_naive
(value, timezone=None)¶ Возвращает наивный
datetime
, который представляет вtimezone
тот же момент времени, что иvalue
,value
являющийся осознаннымdatetime
. Еслиtimezone
заданоNone
, то по умолчанию возвращается current time zone.
django.utils.translation
¶
Для полного обсуждения использования следующего смотрите translation documentation.
-
gettext
(message)¶ Переводит
message
и возвращает его в виде строки.
-
pgettext
(context, message)¶ Переводит
message
вcontext
и возвращает его в виде строки.Для получения дополнительной информации см. раздел Контекстуальные маркеры.
-
gettext_lazy
(message)¶
-
pgettext_lazy
(context, message)¶ То же самое, что и неленивые версии выше, но с использованием ленивого выполнения.
-
gettext_noop
(message)¶ Помечает строки для перевода, но не переводит их сейчас. Это можно использовать для хранения строк в глобальных переменных, которые должны оставаться на базовом языке (поскольку они могут быть использованы извне) и будут переведены позже.
-
ngettext
(singular, plural, number)¶ Переводит
singular
иplural
и возвращает соответствующую строку на основеnumber
.
-
npgettext
(context, singular, plural, number)¶ Переводит
singular
иplural
и возвращает соответствующую строку на основеnumber
иcontext
.
-
ngettext_lazy
(singular, plural, number)¶
-
npgettext_lazy
(context, singular, plural, number)¶ То же самое, что и неленивые версии выше, но с использованием ленивого выполнения.
-
activate
(language)¶ Получает объект перевода для заданного языка и активирует его в качестве текущего объекта перевода для текущего потока.
-
deactivate
()¶ Деактивирует активный в данный момент объект перевода, так что дальнейшие _ вызовы будут снова разрешаться в объект перевода по умолчанию.
-
deactivate_all
()¶ Делает активный объект перевода экземпляром
NullTranslations()
. Это полезно, когда мы хотим, чтобы отложенный перевод по каким-то причинам отображался как оригинальная строка.
-
override
(language, deactivate=False)¶ Менеджер контекста Python, который использует
django.utils.translation.activate()
для получения объекта перевода для данного языка, активирует его в качестве объекта перевода для текущего потока и повторно активирует предыдущий активный язык при выходе. По желанию, он может деактивировать временный перевод при выходе с помощьюdjango.utils.translation.deactivate()
, если аргументомdeactivate
являетсяTrue
. Если вы передаетеNone
в качестве аргумента языка, в контексте активируется экземплярNullTranslations()
.override
также можно использовать в качестве декоратора функций.
-
check_for_language
(lang_code)¶ Проверяет, существует ли глобальный языковой файл для заданного кода языка (например, „fr“, „pt_BR“). Это используется для определения доступности языка, заданного пользователем.
-
get_language
()¶ Возвращает текущий выбранный код языка. Возвращает
None
, если переводы временно отключены (по командеdeactivate_all()
или когдаNone
передается вoverride()
).
-
get_language_bidi
()¶ Возвращает раскладку BiDi выбранного языка:
False
= расположение слева направоTrue
= расположение справа налево
-
get_language_from_request
(request, check_path=False)¶ Анализирует запрос, чтобы определить, какой язык пользователь хочет, чтобы система показала. Учитываются только языки, перечисленные в settings.LANGUAGES. Если пользователь запрашивает подъязык там, где у нас есть основной язык, мы отправляем основной язык.
Если
check_path
равноTrue
, функция сначала проверяет запрашиваемый URL на то, начинается ли его путь с кода языка, указанного в параметреLANGUAGES
.
-
get_supported_language_variant
(lang_code, strict=False)¶ Возвращает
lang_code
, если он находится в параметреLANGUAGES
, возможно, выбирая более общий вариант. Например, возвращается'es'
, еслиlang_code
находится в'es-ar'
, а'es'
находится вLANGUAGES
, но'es-ar'
нет.lang_code
имеет максимально допустимую длину в 500 символов. ЗначениеLookupError
выставляется, еслиlang_code
превышает это ограничение иstrict
равноTrue
, или если нет универсального варианта иstrict
равноFalse
.Если
strict
естьFalse
(по умолчанию), может быть возвращен вариант, специфичный для страны, когда не найден ни код языка, ни его общий вариант. Например, если в'es-co'
есть толькоLANGUAGES
, то это возвращается дляlang_code
таких вариантов, как'es'
и'es-ar'
. Эти соответствия не возвращаются, еслиstrict=True
.Вызывает
LookupError
, если ничего не найдено.Changed in Django 4.2.15:В более старых версиях
lang_code
значения длиной более 500 символов обрабатывались без появленияLookupError
.
-
to_locale
(language)¶ Превращает имя языка (en-us) в имя локали (en_US).
-
templatize
(src)¶ Превращает шаблон Django в нечто, понятное
xgettext
. Он делает это, переводя теги перевода Django в стандартные вызовы функцийgettext
.