Django Utils
Этот документ охватывает все стабильные модули в django.utils. Большинство модулей в django.utils предназначены для внутреннего использования, и только следующие части можно считать стабильными и, следовательно, совместимыми с предыдущими версиями в соответствии с политикой внутреннего прекращения поддержки релизов.
django.utils.cache
Этот модуль содержит вспомогательные функции для управления кэшированием HTTP. Он делает это, управляя заголовком Vary ответов. Он включает функции для непосредственной замены заголовка объектов ответа и декораторы, которые изменяют функции, чтобы они сами выполняли замену заголовков.
Для получения информации о заголовке Vary см. RFC 9110#section-12.5.5.
В сущности, заголовок Vary HTTP определяет, какие заголовки должен учитывать кэш при построении ключа кэша. Запросы с одинаковым путём, но разным содержимым заголовков для заголовков, указанных в Vary, должны получать разные ключи кэша, чтобы предотвратить доставку неправильного содержимого.
Например, middleware для Accept-language должен различать кэши по заголовку 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:ExpiresCache-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также может быть списком или кортежем функций. Они обертываются в обратном порядке, чтобы порядок вызовов соответствовал порядку появления функций в списке/кортеже.См. декорирование представлений на основе классов для примера использования.
-
decorator_from_middleware(middleware_class) -
На основе класса middleware возвращает декоратор представления. Это позволяет использовать функциональность middleware на уровне отдельного представления. Middleware создаётся без переданных параметров.
Предполагается middleware, совместимый со старым стилем 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) -
Помечает middleware как синхронный. (По умолчанию в Django, но это позволяет подготовиться к возможным изменениям по умолчанию в будущих выпусках.)
-
async_only_middleware(middleware) -
Помечает middleware как асинхронный. Django обернёт его в асинхронную среду выполнения при вызове его из пути WSGI-запроса.
-
sync_and_async_middleware(middleware) -
Помечает мидлварь как совместимую с синхронными и асинхронными запросами, это позволяет избежать преобразования запросов. Вы должны реализовать определение типа текущего запроса для использования этого декоратора. Подробности см. в документации асинхронной мидлвари.
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(), за исключением того, что ленивые экземпляры разрешаются в строки, а не сохраняются как ленивые объекты.Если
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, за исключением того, что ленивые экземпляры преобразуются в байтовые строки, а не сохраняются как ленивые объекты.Если
strings_onlyявляетсяTrue, не преобразовывать (некоторые) объекты, не являющиеся строками.
-
iri_to_uri(iri) -
Преобразует часть Международного идентификатора ресурса (IRI) в часть URI, подходящую для включения в URL.
Это алгоритм из раздела 3.1 RFC 3987#section-3.1, немного упрощенный, так как вход предполагается строкой, а не произвольным потоком байтов.
Принимает IRI (строку или байты UTF-8) и возвращает строку с закодированным результатом.
-
uri_to_iri(uri) -
Преобразует универсальный идентификатор ресурса (URI) в международный идентификатор ресурса (IRI).
Это алгоритм из раздела 3.2 RFC 3987#section-3.2.
Принимает URI в ASCII-байтах и возвращает строку с закодированным результатом.
-
filepath_to_uri(path) -
Преобразует путь к файловой системе в часть URI, подходящую для включения в URL. Путь предполагается либо байтами UTF-8, либо строкой, либо объектом
Path.Этот метод будет кодировать определенные символы, которые обычно распознаются как специальные символы для URI. Обратите внимание, что этот метод не кодирует символ ‘, так как он является допустимым символом в URI. Подробнее см. функцию
encodeURIComponent()JavaScript.Возвращает ASCII-строку с закодированным результатом.
-
escape_uri_path(path) -
Экранирует небезопасные символы из части пути универсального идентификатора ресурса (URI).
django.utils.feedgenerator
Пример использования:
>>> from django.utils import feedgenerator
>>> feed = feedgenerator.Rss201rev2Feed(
... title="Poynter E-Media Tidbits",
... link="http://www.poynter.org/column.asp?id=31",
... description="A group blog by the sharpest minds in online media/journalism/publishing.",
... language="en",
... )
>>> feed.add_item(
... title="Hello",
... link="http://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
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, **kwargs) -
Инициализирует ленту с заданным словарем метаданных, который применяется ко всей ленте.
Все дополнительные ключевые аргументы, которые вы передаете
__init__, будут сохранены вself.feed.Все параметры должны быть строками, за исключением
categories, которое должно быть последовательностью строк.
-
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() -
Возвращает дополнительные атрибуты для размещения в корневом элементе (т. е. элементе ленты/канала). Вызывается из
write().
-
add_root_elements(handler) -
Добавляет элементы в корневой элемент (т. е. элемент ленты/канала). Вызывается из
write().
-
item_attributes(item) -
Возвращает дополнительные атрибуты для размещения в каждом элементе (т. е. элементе item/entry).
-
add_item_elements(handler, item) -
Добавляет элементы в каждый элемент (т. е. элемент item/entry).
-
write(outfile, encoding) -
Выводит ленту в заданной кодировке в
outfile, который является объектом типа файла. Подклассы должны переопределить это.
-
writeString(encoding) -
Возвращает ленту в заданной кодировке в виде строки.
-
latest_post_date() -
Возвращает самую позднюю
pubdateилиupdateddateдля всех элементов в ленте. Если ни у одного элемента нет ни одного из этих атрибутов, возвращается текущая дата/время UTC.
-
Enclosure
-
class Enclosure -
Представляет вложение RSS
RssFeed
-
class RssFeed(SyndicationFeed)
Rss201rev2Feed
-
class Rss201rev2Feed(RssFeed) -
Спецификация: https://cyber.harvard.edu/rss/rss.html
RssUserland091Feed
-
class RssUserland091Feed(RssFeed) -
Спецификация: http://backend.userland.com/rss091
Atom1Feed
-
class Atom1Feed(SyndicationFeed) -
Спецификация: RFC 4287
django.utils.functional
-
class cached_property(func)[source] -
Декоратор
@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в представлении и шаблоне одинаковый, применение декоратора@cached_propertyк методуfriends()позволит избежать этого: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 del person.friends # or delattr(person, "friends") # set a value manually, that will persist on the instance until cleared person.friends = ["Huckleberry Finn", "Tom Sawyer"]
Из-за работы протокола дескриптора, использование
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)[source] -
Аналогично
@classmethod, декоратор@classpropertyпреобразует результат метода с одним аргументомclsв свойство, к которому можно получить доступ непосредственно из класса.
-
keep_lazy(func, *resultclasses)[source] -
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)[source] -
Сокращение для
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не экранируется, но все остальные аргументы и ключевые слова передаются через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()без передачи аргументов или ключевых слов устарела.
-
format_html_join(sep, format_string, args_generator) -
Обёртка для
format_html(), для распространённого случая, когда группа аргументов должна быть отформатирована с использованием одной и той же строки форматирования, а затем объединена с помощьюsep.sepтакже передаётся черезconditional_escape().args_generatorдолжен быть итератором, который возвращает последовательностьargs, которые будут переданы вformat_html(). Например:format_html_join("\n", "<li>{} {}</li>", ((u.first_name, u.last_name) for u in users))
-
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>'encoder, который по умолчанию равенdjango.core.serializers.json.DjangoJSONEncoder, будет использоваться для сериализации данных. См. сериализацию JSON для получения дополнительных сведений об этом сериализаторе.Изменено в Django 4.2:Был добавлен аргумент
encoder.
-
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)[source] -
Версия функции Python
urllib.parse.urlencode(), которая может работать со значениямиMultiValueDictи нестрокового типа.
-
http_date(epoch_seconds=None)[source] -
Форматирует время в соответствии с форматом даты 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)[source] -
Добавлено в Django 4.2.
Строит значение заголовка HTTP
Content-Dispositionиз заданныхfilenameв соответствии со спецификацией RFC 6266. ВозвращаетNoneеслиas_attachmentявляетсяFalseиfilenameявляетсяNone, в противном случае возвращает строку, подходящую для заголовка HTTPContent-Disposition.
-
base36_to_int(s)[source] -
Преобразует строку в системе счисления с основанием 36 в целое число.
-
int_to_base36(i)[source] -
Преобразует положительное целое число в строку в системе счисления с основанием 36.
-
urlsafe_base64_encode(s)[source] -
Кодирует байтовую строку в строку base64 для использования в URL, удаляя любые хвостовые знаки равенства.
-
urlsafe_base64_decode(s)[source] -
Декодирует закодированную в base64 строку, добавляя обратно любые хвостовые знаки равенства, которые могли быть удалены.
django.utils.module_loading
Функции для работы с модулями Python.
-
import_string(dotted_path)[source] -
Импортирует путь к модулю с точками и возвращает атрибут/класс, обозначенный последним именем в пути. Вызывает
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[source] -
Подкласс
strспециально помеченный как «безопасный» (не требует дополнительного экранирования) для целей вывода HTML.
-
mark_safe(s)[source] -
Явно отмечает строку как безопасную для вывода (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-слэг, выполняя:
- Преобразование в ASCII, если
allow_unicodeявляетсяFalse(по умолчанию). - Преобразование в нижний регистр.
- Удаление символов, которые не являются буквенно-цифровыми, подчеркиваниями, дефисами или пробелами.
- Замена пробелов или повторяющихся дефисов одиночными дефисами.
- Удаление начальных и конечных пробелов, дефисов и подчеркиваний.
Например:
>>> slugify(" Joel is a slug ") 'joel-is-a-slug'Если вы хотите разрешить символы Юникода, передайте
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, представляющий по умолчанию часовой пояс.
-
get_default_timezone_name() -
Возвращает имя по умолчанию часового пояса.
-
get_current_timezone() -
Возвращает экземпляр
tzinfo, представляющий текущий часовой пояс.
-
get_current_timezone_name() -
Возвращает имя текущей временной зоны.
-
activate(timezone) -
Устанавливает текущую временную зону. Аргумент
timezoneдолжен быть экземпляром подклассаtzinfoили именем временной зоны.
-
deactivate() -
Отменяет установку текущей временной зоны.
-
override(timezone) -
Это менеджер контекста Python, который устанавливает текущую временную зону при входе с помощью
activate()и восстанавливает ранее активную временную зону при выходе. Если аргументtimezoneравенNone, текущая временная зона отменяется при входе с помощьюdeactivate()вместо этого.overrideтакже может использоваться как декоратор функции.
-
localtime(value=None, timezone=None) -
Преобразует осознанное
datetimeв другую временную зону, по умолчанию в текущую временную зону.Если
valueопущено, оно по умолчанию равноnow().Эта функция не работает с неосознанными датами и временами; используйте вместо этого
make_aware().
-
localdate(value=None, timezone=None) -
Использует
localtime()для преобразования осознанногоdatetimeвdate()в другой временной зоне, по умолчанию в текущую временную зону.Если
valueопущено, оно по умолчанию равноnow().Эта функция не работает с неосознанными датами.
-
now() -
Возвращает
datetime, представляющий текущий момент времени. Точное значение зависит от значенияUSE_TZ:- Если
USE_TZравноFalse, это будет неосознанная дата и время (т.е. дата и время без связанной временной зоны), представляющая текущее время в локальной временной зоне системы. - Если
USE_TZравноTrue, это будет осознанное значение даты и времени, представляющее текущее время в 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, оно по умолчанию устанавливается на текущую временную зону.
-
make_naive(value, timezone=None) -
Возвращает неосознанную
datetime, которая представляет вtimezoneту же точку во времени, что иvalue,value— осознанноеdatetime. Еслиtimezoneустановлено наNone, оно по умолчанию устанавливается на текущую временную зону.
django.utils.translation
Для более подробного обсуждения использования см. документацию по переводу.
-
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'нет.Если
strictравноFalse(по умолчанию), может быть возвращен вариант, специфичный для страны, если ни код языка, ни его общий вариант не найдены. Например, если только'es-co'находится вLANGUAGES, это возвращается дляlang_codeтаких, как'es'и'es-ar'. Эти совпадения не возвращаются, еслиstrict=True.Вызывает
LookupError, если ничего не найдено.
-
to_locale(language) -
Преобразует имя языка (en-us) в имя локали (en_US).
-
templatize(src) -
Преобразует Django шаблон в нечто, что понимается
xgettext. Это делается путем перевода тегов Django перевода в стандартные вызовы функцийgettext.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.0/ref/utils/