• 3.1
  • 5.0
  • 6.1
  • Версия документации: 3.2

Джанго Утилиты

Этот документ охватывает все стабильные модули в django.utils. Большинство модулей в django.utils предназначены для внутреннего использования, и только следующие части могут считаться стабильными и, следовательно, обратно совместимыми в соответствии с внутренней политикой устаревания выпусков.

django.utils.cache

Этот модуль содержит вспомогательные функции для управления HTTP-кешированием. Это достигается путем управления заголовком ответов Vary. Он включает в себя функции для непосредственного исправления заголовка объектов ответа и декораторы, которые изменяют функции для самостоятельного исправления заголовка.

For information on the Vary header, see RFC 7231 Section 7.1.4.

По сути, HTTP-заголовок Vary определяет, какие заголовки кэш должен учитывать при построении своего ключа кэша. Запросы с одинаковым путем, но с разным содержимым заголовка для заголовков, названных в Vary, должны получать разные ключи кэша, чтобы предотвратить доставку неправильного содержимого.

Например, промежуточное ПО интернационализации должно будет различать кеши по заголовку Accept-language.

patch_cache_control(response, **kwargs)

Эта функция исправляет заголовок Cache-Control, добавляя в него все аргументы ключевого слова. Преобразование заключается в следующем:

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

  • Если значение параметра равно «True» (именно «True», а не просто истинное значение), в заголовок добавляется только имя параметра.

  • Все остальные параметры добавляются со своими значениями после применения к ним str().

Changed in Django 3.1:

Support for multiple field names in the no-cache directive was added.

get_max_age(response)

Возвращает максимальный возраст из заголовка ответа Cache-Control в виде целого числа (или None, если он не найден или не является целым числом).

patch_response_headers(response, cache_timeout=None)

Добавляет несколько полезных заголовков к данному объекту HttpResponse:

  • Срок действия истекает

  • Кэш-Контроль

Каждый заголовок добавляется только в том случае, если он еще не установлен.

cache_timeout измеряется в секундах. Параметр CACHE_MIDDLEWARE_SECONDS используется по умолчанию.

add_never_cache_headers(response)

Добавляет заголовок Cache-Control: max-age=0, no-cache, no-store, must-revalidate, Private к ответу, указывающий, что страница никогда не должна кэшироваться.

patch_vary_headers(response, newheaders)

Adds (or updates) the Vary header in the given HttpResponse object. newheaders is a list of header names that should be in Vary. If headers contains an asterisk, then Vary header will consist of a single asterisk '*', according to RFC 7231 Section 7.1.4. Otherwise, existing headers in Vary aren’t removed.

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.

Changed in Django 3.1:

Support for comma separators for milliseconds was added.

parse_datetime(value)

Анализирует строку и возвращает datetime.datetime.

Поддерживаются смещения UTC; если value описывает его, атрибут tzinfo результата представляет собой экземпляр datetime.timezone.

Changed in Django 3.1:

Support for comma separators for milliseconds was added.

parse_duration(value)

Анализирует строку и возвращает datetime.timedelta.

Ожидаются данные в формате "DD HH:MM:SS.uuuuuu", ``"DD HH:MM:SS,uuuuuu"`, или как указано в ISO 8601 (например, ``P4DT1H15M20S, что эквивалентно 4 1:15:20) или формате дневного интервала PostgreSQL (например, 3 дней 04:05:06).

Changed in Django 3.1:

Support for comma separators for decimal fractions in the ISO 8601 format and for the format "DD HH:MM:SS,uuuuuu" was added.

django.utils.decorators

method_decorator(decorator, name='')

Преобразует декоратор функции в декоратор метода. Его можно использовать для украшения методов или классов; в последнем случае name — это имя декорируемого метода, которое является обязательным.

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

Пример использования см. в разделе декорирование представлений на основе классов.

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)
New in Django 3.1.

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

async_only_middleware(middleware)
New in Django 3.1.

Помечает промежуточное программное обеспечение как asynchronous-only. Django обернет его в асинхронный цикл событий, когда он будет вызван из пути запроса WSGI.

sync_and_async_middleware(middleware)
New in Django 3.1.

Помечает промежуточное программное обеспечение как sync и async-совместимое, это позволяет избежать преобразования запросов. Чтобы использовать этот декоратор, необходимо реализовать обнаружение текущего типа запроса. Подробности смотрите в документации по асинхронному промежуточному программному обеспечению <async-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, не конвертируйте (некоторые) нестроковые объекты.

smart_text(s, encoding='utf-8', strings_only=False, errors='strict')

Не рекомендуется, начиная с версии 3.0.

Alias of smart_str() for backwards compatibility, especially in code that supports Python 2.

force_text(s, encoding='utf-8', strings_only=False, errors='strict')

Не рекомендуется, начиная с версии 3.0.

Alias of force_str() for backwards compatibility, especially in code that supports Python 2.

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, содержащую закодированный результат.

Changed in Django 3.1:

Support for pathlib.Path path was added.

escape_uri_path(path)

Экранирует небезопасные символы из пути универсального идентификатора ресурса (URI).

django.utils.feedgenerator

Sample usage:

>>> 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/inсовместимый-rss.

get_tag_uri(url, date)

Создает TagURI.

См. https://web.archive.org/web/20110514113830/http://diveintomark.org/archives/2004/05/28/howto-atom-id.

SyndicateFeed

class SyndicationFeed

Base class for all syndication feeds. Subclasses should provide 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.

Все параметры должны быть строками, кроме «категорий», которые должны представлять собой последовательность строк.

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)

Возвращает дополнительные атрибуты для размещения в каждом элементе элемента (т. е. элемента/записи).

add_item_elements(handler, item)

Добавьте элементы в каждый элемент (т. е. элемент/запись).

write(outfile, encoding)

Выводит канал в заданной кодировке в outfile, который представляет собой файлоподобный объект. Подклассы должны переопределять это.

writeString(encoding)

Возвращает канал в заданной кодировке в виде строки.

latest_post_date()

Возвращает последнюю дату публикации или обновленную дату для всех элементов в ленте. Если ни один из элементов не имеет ни одного из этих атрибутов, возвращается текущая дата/время UTC.

Корпус

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)

Декоратор @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')

You only need the name argument for Python < 3.6 support.

Хотя 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)
New in Django 3.1.

Подобно @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, ...):
    # 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)

Ярлык для 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)

Возвращает заданный текст с амперсандами, кавычками и угловыми скобками, закодированный для использования в HTML. Входные данные сначала преобразуются в строку, а к выходным применяется mark_safe().

conditional_escape(text)

Similar to escape(), except that it doesn’t operate on pre-escaped strings, so it will not double escape.

format_html(format_string, *args, **kwargs)

This is similar to str.format(), except that it is appropriate for building up HTML fragments. All args and kwargs are passed through conditional_escape() before being passed to 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)

Обертка 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)
)
strip_tags(value)

Пытается удалить из строки все, что похоже на HTML-тег, то есть все, что содержится в <>.

Абсолютно НЕТ гарантии, что полученная строка будет безопасной для HTML. Поэтому НИКОГДА не отмечайте безопасным результат вызова strip_tag без его предварительного экранирования, например, с помощью escape().

Например:

strip_tags(value)

Если value равно "<b>Джоэл</b> <button>является</button> <span>слизнем</span>", возвращаемым значением будет "Джоэл - слизень".

If you are looking for a more robust solution, take a look at the bleach Python library.

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)

Formats the time to match the RFC 1123 Section 5.2.14 date format as specified by HTTP RFC 7231 Section 7.1.1.1.

Принимает число с плавающей запятой, выраженное в секундах с начала эпохи в формате UTC, например, выведенное с помощью time.time(). Если установлено значение «Нет», по умолчанию используется текущее время.

Выводит строку в формате Wdy, DD Mon YYYY HH:MM:SS GMT.

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().

String marked safe will become unsafe again if modified. For example:

>>> 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+)/$, например персона/5/.

slugify(value, allow_unicode=False)

Преобразует строку в фрагмент URL-адреса следующим образом:

  1. Преобразование в ASCII, если allow_unicode имеет значение False (по умолчанию).

  2. Преобразование в нижний регистр.

  3. Удаление символов, которые не являются буквенно-цифровыми, подчеркиваниями, дефисами или пробелами.

  4. Замена любых пробелов или повторяющихся тире одинарными тире.

  5. Удаление начальных и конечных пробелов, тире и подчеркиваний.

Например:

>>> slugify(' Joel is a slug ')
'joel-is-a-slug'

If you want to allow Unicode characters, pass allow_unicode=True. For example:

>>> slugify('你好 World', allow_unicode=True)
'你好-world'
Changed in Django 3.2:

In older versions, leading and trailing dashes and underscores are not removed.

django.utils.timezone

utc

tzinfo instance that represents UTC.

get_fixed_timezone(offset)

Возвращает экземпляр tzinfo, который представляет часовой пояс с фиксированным смещением от UTC.

offset представляет собой datetime.timedelta или целое число минут. Используйте положительные значения для часовых поясов к востоку от UTC и отрицательные значения для запада от UTC.

get_default_timezone()

Возвращает экземпляр tzinfo, который представляет часовой пояс по умолчанию.

get_default_timezone_name()

Возвращает имя часового пояса по умолчанию <default-current-time-zone>`.

get_current_timezone()

Возвращает экземпляр tzinfo, который представляет текущий часовой пояс.

get_current_timezone_name()

Возвращает имя текущего часового пояса.

activate(timezone)

Устанавливает текущий часовой пояс. Аргумент timezone должен быть экземпляром подкласса tzinfo или именем часового пояса.

deactivate()

Сбрасывает текущий часовой пояс.

override(timezone)

Это контекстный менеджер Python, который устанавливает текущий часовой пояс <default-current-time-zone>` при входе с помощью 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, это будет 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, is_dst=None)

Возвращает известный datetime, который представляет тот же момент времени, что и value в timezone, value является наивным datetime. Если для timezone установлено значение None, по умолчанию используется текущий часовой пояс <default-current-time-zone>`.

When using pytz, the pytz.AmbiguousTimeError exception is raised if you try to make value aware during a DST transition where the same time occurs twice (when reverting from DST). Setting is_dst to True or False will avoid the exception by choosing if the time is pre-transition or post-transition respectively.

When using pytz, the pytz.NonExistentTimeError exception is raised if you try to make value aware during a DST transition such that the time never occurred. For example, if the 2:00 hour is skipped during a DST transition, trying to make 2:30 aware in that time zone will raise an exception. To avoid that you can use is_dst to specify how make_aware() should interpret such a nonexistent time. If is_dst=True then the above time would be interpreted as 2:30 DST time (equivalent to 1:30 local time). Conversely, if is_dst=False the time would be interpreted as 2:30 standard time (equivalent to 3:30 local time).

The is_dst parameter has no effect when using non-pytz timezone implementations.

make_naive(value, timezone=None)

Возвращает простой datetime, который представляет в timezone тот же момент времени, что и value, value является осведомленным datetime. Если для timezone установлено значение None, по умолчанию используется текущий часовой пояс <default-current-time-zone>`.

django.utils.translation

Подробное обсуждение использования следующего см. в документации по переводу.

gettext(message)

Переводит message и возвращает его в виде строки.

pgettext(context, message)

Переводит message с учетом контекста и возвращает его в виде строки.

Для получения дополнительной информации см. Контекстные маркеры.

gettext_lazy(message)
pgettext_lazy(context, message)

То же, что и неленивые версии выше, но с использованием ленивого выполнения.

См. документацию по ленивым переводам <lazy-translations>`.

gettext_noop(message)

Помечает строки для перевода, но сейчас не переводит их. Это можно использовать для хранения строк в глобальных переменных, которые должны оставаться на базовом языке (поскольку они могут использоваться извне) и будут переведены позже.

ngettext(singular, plural, number)

Преобразует «единственное» и «множественное» число и возвращает соответствующую строку на основе «числа».

npgettext(context, singular, plural, number)

Переводит «единственное» и «множественное» число и возвращает соответствующую строку на основе «числа» и «контекста».

ngettext_lazy(singular, plural, number)
npgettext_lazy(context, singular, plural, number)

То же, что и неленивые версии выше, но с использованием ленивого выполнения.

См. документацию по ленивым переводам <lazy-translations>`.

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)

Анализирует запрос, чтобы определить, какой язык пользователь хочет, чтобы система отображала. Учитываются только языки, указанные в настройках.ЯЗЫКИ. Если пользователь запрашивает подъязык, где у нас есть основной язык, мы отправляем основной язык.

Если 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 (по умолчанию), вариант для конкретной страны может быть возвращен, если не найден ни код языка, ни его общий вариант. Например, если в LANGUAGES находится только 'es-co', он возвращается для lang_code, например 'es' и 'es-ar'. Эти совпадения не возвращаются, если strict=True.

Вызывает LookupError, если ничего не найдено.

to_locale(language)

Превращает имя языка (en-us) в имя локали (en_US).

templatize(src)

Превращает шаблон Django во что-то, что понимается xgettext. Это делается путем перевода тегов перевода Django в стандартные вызовы функции gettext.

LANGUAGE_SESSION_KEY

Session key under which the active language for the current session is stored.

Не рекомендуется, начиная с версии 3.0: The language won’t be stored in the session in Django 4.0. Use the LANGUAGE_COOKIE_NAME cookie instead.

Back to Top