Django Utils
Этот документ охватывает все стабильные модули в django.utils. Большинство модулей в django.utils предназначены для внутреннего использования, и только следующие части могут считаться стабильными и, следовательно, обратно совместимыми в соответствии с политикой внутренней деприкации релизов.
django.utils.cache
Этот модуль содержит вспомогательные функции для управления кэшированием HTTP. Он делает это, управляя заголовком Vary ответов. Он включает функции для прямого изменения заголовка объектов ответов и декораторы, которые изменяют функции, чтобы они сами выполняли эту замену заголовка.
Дополнительную информацию о заголовке Vary см. в RFC 7231#раздел-7.1.4.
По существу, заголовок Vary HTTP определяет, какие заголовки кэш должен учитывать при построении своего ключа кэша. Запросы с одинаковым путем, но с разным содержимым заголовков для заголовков, указанных в Vary, должны получать разные ключи кэша, чтобы предотвратить доставку неправильного содержимого.
Например, среда локализаций должна различать кэши по заголовку 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) -
Добавляет заголовок
Cache-Control: max-age=0, no-cache, no-store, must-revalidate, privateв ответ, чтобы указать, что страница никогда не должна кэшироваться.Изменено в Django 3.0:был добавлен директива
private.
-
patch_vary_headers(response, newheaders) -
Добавляет (или обновляет) заголовок
Varyв заданном объектеHttpResponse.newheaders— это список имен заголовков, которые должны быть вVary. Если headers содержит звездочку, то заголовокVaryбудет содержать единственную звездочку'*'. В противном случае существующие заголовки вVaryне удаляются.Изменено в Django 3.0:была добавлена обработка звездочки
'*'в соответствии с RFC 7231#раздел-7.1.4.
-
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.Изменено в Django 2.2:В старых версиях атрибут
tzinfo— экземплярFixedOffset.
-
parse_duration(value) -
Парсит строку и возвращает
datetime.timedelta.Ожидаются данные в формате
"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='')[source] -
Преобразует декоратор функции в декоратор метода. Он может быть использован для декорации методов или классов; в последнем случае,
name- имя метода, подлежащего декорации, и является обязательным.decoratorтакже может быть списком или кортежем функций. Они оборачиваются в обратном порядке, так что порядок вызовов соответствует порядку появления функций в списке/кортеже.См. декорацию представлений на основе классов для примера использования.
-
decorator_from_middleware(middleware_class)[source] -
Дано класс middleware, возвращает декоратор представления. Это позволяет использовать функциональность middleware на основе представлений. Middleware создается без передачи параметров.
Предполагается, что middleware совместим со старым стилем Django 1.9 и ранее (имея методы вроде
process_request(),process_exception(), иprocess_response()).
-
decorator_from_middleware_with_args(middleware_class)[source] -
Подобно
decorator_from_middleware, но возвращает функцию, принимающую аргументы, которые будут переданы middleware_class. Например, декораторcache_page()создаётся изCacheMiddlewareтак:cache_page = decorator_from_middleware_with_args(CacheMiddleware) @cache_page(3600) def my_view(request): pass
django.utils.encoding
-
smart_str(s, encoding='utf-8', strings_only=False, errors='strict')[source] -
Возвращает объект
strпредставляющий произвольный объектs. Обрабатывает байтовые строки с использованием кодировкиencoding.Если
strings_onlyравноTrue, не преобразовывать (некоторые) объекты, не являющиеся строками.
-
is_protected_type(obj)[source] -
Определить, является ли экземпляр объекта защищённого типа.
Объекты защищённых типов сохраняются в исходном виде при передаче в
force_str(strings_only=True).
-
force_str(s, encoding='utf-8', strings_only=False, errors='strict')[source] -
Аналогично
smart_str(), за исключением того, что ленивые экземпляры разрешаются в строки, а не сохраняются как ленивые объекты.Если
strings_onlyравноTrue, не преобразовывать (некоторые) объекты, не являющиеся строками.
-
smart_bytes(s, encoding='utf-8', strings_only=False, errors='strict')[source] -
Возвращает строку байтов произвольного объекта
s, закодированную в соответствии сencoding.Если
strings_onlyравноTrue, не преобразовывать (некоторые) объекты, не являющиеся строками.
-
force_bytes(s, encoding='utf-8', strings_only=False, errors='strict')[source] -
Аналогично
smart_bytes, за исключением того, что ленивые экземпляры разрешаются в строки байтов, а не сохраняются как ленивые объекты.Если
strings_onlyравноTrue, не преобразовывать (некоторые) объекты, не являющиеся строками.
-
smart_text(s, encoding='utf-8', strings_only=False, errors='strict')[source] -
Устарело начиная с версии 3.0.
Псевдоним
force_str()для обратной совместимости, особенно в коде, поддерживающем Python 2.
-
force_text(s, encoding='utf-8', strings_only=False, errors='strict')[source] -
Устарело начиная с версии 3.0.
Псевдоним
force_str()для обратной совместимости, особенно в коде, поддерживающем Python 2.
-
iri_to_uri(iri)[source] -
Преобразование части Международного идентификатора ресурса (IRI) в часть URI, подходящую для включения в URL.
Это алгоритм из раздела 3.1 RFC 3987#section-3.1, немного упрощённый, так как вход предполагается строкой, а не произвольным потоком байтов.
Принимает IRI (строку или байты UTF-8) и возвращает строку, содержащую закодированный результат.
-
uri_to_iri(uri)[source] -
Преобразование универсального идентификатора ресурса в международный идентификатор ресурса.
Это алгоритм из раздела 3.2 RFC 3987#section-3.2.
Принимает URI в байтах ASCII и возвращает строку, содержащую закодированный результат.
-
filepath_to_uri(path)[source] -
Преобразование пути файловой системы в часть URI, подходящую для включения в URL. Путь предполагается либо строкой, либо байтами UTF-8.
Этот метод закодирует определённые символы, которые обычно распознаются как специальные символы URI. Обратите внимание, что этот метод не кодирует символ ', так как он является допустимым символом URI. См. JavaScript-функцию
encodeURIComponent()для получения дополнительной информации.Возвращает ASCII-строку, содержащую закодированный результат.
-
escape_uri_path(path)[source] -
Экранирует недопустимые символы из части пути универсального идентификатора ресурса (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 Weblog 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, name=None)[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в представлении и шаблоне одинаковый, декорирование метода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 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, name='friends')
Аргумент
nameнеобходим только для поддержки Python < 3.6.Изменено в Django 2.2:Более старые версии Django требуют аргумент
nameдля всех версий Python.Хотя
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
-
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, ...): # 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, ...): ...Декоратор
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, ...): ... # Which can be rewritten as: @keep_lazy_text def fancy_utility_function(s, ...): ...
django.utils.html
Обычно вы должны создавать HTML с помощью шаблонов Django, чтобы использовать механизм автоэкранирования, используя утилиты в django.utils.safestring при необходимости. Этот модуль предоставляет некоторые дополнительные утилиты низкого уровня для экранирования HTML.
-
escape(text)[source] -
Возвращает заданный текст с амперсансами, кавычками и угловыми скобками, закодированными для использования в HTML. Вход сначала приводится к строке, а к выходу применяется
mark_safe().Изменено в Django 3.0:В более старых версиях
'преобразуется в его десятичный код'вместо эквивалентного шестнадцатеричного кода'.
-
conditional_escape(text)[source] -
Аналогично
escape(), за исключением того, что она не работает со строками, уже экранированными, поэтому не будет двойного экранирования.
-
format_html(format_string, *args, **kwargs)[source] -
Это аналогично
str.format(), но подходит для построения фрагментов HTML. Все аргументы и ключевые слова передаются черезconditional_escape()перед передачей вstr.format().В случае построения небольших фрагментов 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()для значений.
-
format_html_join(sep, format_string, args_generator)[source] -
Обёртка для
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) )
-
Пытается удалить всё, что похоже на тег HTML, из строки, то есть всё, что находится внутри
<>.Совершенно НИКАКИХ гарантий о том, что полученная строка будет безопасной для HTML, не предоставляется. ПОЭТОМУ НИКОГДА не помечайте результат вызова
strip_tagкак безопасный, не экранировав его сначала, например, с помощьюescape().Например:
strip_tags(value)
Если
valueравно"<b>Joel</b> <button>is</button> a <span>slug</span>", значение результата будет"Joel is a slug".Если вы ищете более надёжное решение, обратитесь к библиотеке Python bleach.
-
html_safe()[source] -
Метод
__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 7231#section-7.1.1.1.
Принимает число с плавающей точкой, выражающее секунды с эпохи в UTC — например, то, что выводится
time.time(). Если установлено значениеNone, по умолчанию используется текущее время.Выводит строку в формате
Wdy, DD Mon YYYY HH:MM:SS GMT.
-
base36_to_int(s)[source] -
Преобразует строку в базе 36 в целое число.
-
int_to_base36(i)[source] -
Преобразует положительное целое число в строку в базе 36.
-
urlsafe_base64_encode(s)[source] -
Кодирует байтовую строку в строку base64 для использования в URL, удаляя любые завершающие знаки равенства.
Изменено в Django 2.2:В более старых версиях возвращает байтовую строку вместо строки.
-
urlsafe_base64_decode(s)[source] -
Декодирует закодированную в base64 строку, добавляя обратно любые завершающие знаки равенства, которые могли быть удалены.
Изменено в Django 2.2:В более старых версиях
sможет быть байтовой строкой.
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)[source] -
Преобразует строку в URL-slug следующим образом:
- Преобразование в 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
-
utc -
tzinfoэкземпляр, представляющий UTC.
-
class FixedOffset(offset=None, name=None) -
Подкласс
tzinfo, моделирующий фиксированное смещение от UTC.offset— целое число минут к востоку от UTC.Устарело начиная с версии 2.2: Используйте
datetime.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, это будет неявный объект datetime (без указания временной зоны), представляющий текущее время в локальной временной зоне системы. - Если
USE_TZравноTrue, это будет явный объект 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, is_dst=None) -
Возвращает явный объект
datetime, представляющий ту же точку во времени, что иvalueвtimezone, гдеvalue— неявный объектdatetime. Еслиtimezoneустановлено вNone, используется текущая временная зона.Исключение
pytz.AmbiguousTimeErrorвозникает, если вы пытаетесь сделатьvalueявным во время перехода на/с летнего времени, когда одно и то же время происходит дважды (при возврате из летнего времени). Установкаis_dstвTrueилиFalseпредотвратит исключение, выбрав, относится ли время до или после перехода.Исключение
pytz.NonExistentTimeErrorвозникает, если вы пытаетесь сделатьvalueявным во время перехода на/с летнего времени так, что время никогда не происходило. Например, если 2:00 час пропущено во время перехода на/с летнего времени, попытка сделать 2:30 явным в этой временной зоне вызовет исключение. Чтобы этого избежать, можно использоватьis_dst, чтобы указать, какmake_aware()интерпретирует такое несуществующее время. Еслиis_dst=True, то вышеупомянутое время будет интерпретировано как 2:30 времени DST (что эквивалентно 1:30 по местному времени). И наоборот, еслиis_dst=False, время будет интерпретировано как 2:30 стандартного времени (что эквивалентно 3:30 по местному времени).
-
make_naive(value, timezone=None) -
Возвращает неявный объект
datetime, который представляет ту же точку во времени вtimezone, что иvalue, гдеvalue— явный объектdatetime. Еслиtimezoneустановлено вNone, используется текущая временная зона.
django.utils.translation
Для полного обсуждения использования см. документацию по переводу.
-
gettext(message)[source] -
Переводит
messageи возвращает его как строку.
-
pgettext(context, message)[source] -
Переводит
messageс учётомcontextи возвращает его как строку.Дополнительная информация: Контекстные маркеры.
-
gettext_lazy(message)
-
pgettext_lazy(context, message) -
То же, что и неленивые версии выше, но с использованием ленивого выполнения.
-
gettext_noop(message)[source] -
Помечает строки для перевода, но не переводит их сейчас. Это можно использовать для хранения строк в глобальных переменных, которые должны остаться на языке исходника (потому что они могут быть использованы внешне), и будут переведены позже.
-
ngettext(singular, plural, number)[source] -
Переводит
singularиpluralи возвращает соответствующую строку, основанную наnumber.
-
npgettext(context, singular, plural, number)[source] -
Переводит
singularиpluralи возвращает соответствующую строку, основанную наnumberиcontext.
-
ngettext_lazy(singular, plural, number)[source]
-
npgettext_lazy(context, singular, plural, number)[source] -
Аналогично версиям без lazy-выполнения выше, но с использованием отложенного выполнения.
-
activate(language)[source] -
Получает объект перевода для заданного языка и активирует его в качестве текущего объекта перевода для текущей нити.
-
deactivate()[source] -
Деактивирует текущий активный объект перевода, чтобы дальнейшие вызовы _ снова обращались к объекту перевода по умолчанию.
-
deactivate_all()[source] -
Делает активный объект перевода экземпляром
NullTranslations(). Это полезно, когда мы хотим, чтобы отложенные переводы отображались как исходная строка по какой-либо причине.
-
override(language, deactivate=False)[source] -
Менеджер контекста Python, использующий
django.utils.translation.activate()для получения объекта перевода для заданного языка, активирует его как объект перевода для текущей нити и восстанавливает предыдущий активный язык при выходе. По желанию, он может деактивировать временный перевод при выходе с помощьюdjango.utils.translation.deactivate(), если аргументdeactivateравенTrue. Если вы передадитеNoneв качестве аргумента языка, в контексте будет активирован экземплярNullTranslations().overrideтакже может использоваться в качестве декоратора функции.
-
check_for_language(lang_code)[source] -
Проверяет, существует ли глобальный файл языка для данного кода языка (например, ‘fr’, ‘pt_BR’). Это используется для определения того, доступен ли предоставленный пользователем язык.
-
get_language()[source] -
Возвращает код текущего выбранного языка. Возвращает
None, если переводы временно деактивированы (с помощьюdeactivate_all()или когдаNoneпередается вoverride()).
-
get_language_bidi()[source] -
Возвращает двунаправленную компоновку выбранного языка:
-
False= разметка слева направо -
True= разметка справа налево
-
-
get_language_from_request(request, check_path=False)[source] -
Анализирует запрос, чтобы определить, какой язык пользователь хочет видеть на сайте. Учитываются только языки, указанные в settings.LANGUAGES. Если пользователь запросил подязык, где у нас есть основной язык, мы отправляем основной язык.
Если
check_pathравноTrue, функция сначала проверяет запрошенный URL на предмет того, начинается ли его путь с кода языка, указанного в настройкеLANGUAGES.
-
get_supported_language_variant(lang_code, strict=False)[source] -
Возвращает
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)[source] -
Преобразует имя языка (en-us) в имя локали (en_US).
-
templatize(src)[source] -
Преобразует Django шаблон в нечто, что понимается
xgettext. Это делается путем перевода тегов Django перевода в стандартные вызовы функцийgettext.
-
LANGUAGE_SESSION_KEY -
Ключ сессии, под которым хранится активный язык для текущей сессии.
Устарело начиная с версии 3.0: Язык не будет храниться в сессии в Django 4.0. Используйте куки
LANGUAGE_COOKIE_NAMEвместо этого.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.0/ref/utils/