Django Utils

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

django.utils.cache

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

Для получения информации о Varyзаголовке см.RFC 7231 # section-7.1.4 .

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

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

patch_cache_control( ответ , ** kwargs )

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

  • Все имена параметров ключевого слова переводятся в нижний регистр, а символы подчеркивания преобразуются в дефисы.
  • Если значение параметра равно True(точно True, а не только истинное значение), в заголовок добавляется только имя параметра.
  • Все остальные параметры добавляются с их значением после применения str()к нему.
Изменено в Django 3.1:

no-cacheДобавлена поддержка нескольких имен полей в директиве.

get_max_age( ответ )

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

patch_response_headers( ответ , cache_timeout = None )

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

  • Expires
  • Cache-Control

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

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

add_never_cache_headers( ответ )

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

patch_vary_headers( ответ , новые заголовки )

Добавляет (или обновляет) Varyзаголовок в данном HttpResponseобъекте. newheadersэто список имен заголовков, которые должны быть в Vary. Если заголовки содержат звездочку, то Varyзаголовок будет состоять из одной звездочки '*', согласноRFC 7231 # section-7.1.4 . В противном случае существующие заголовкиVaryне удаляются.

get_cache_key( запрос , key_prefix = None , method = 'GET' , cache = None )

Возвращает ключ кеша на основе пути запроса. Его можно использовать на этапе запроса, поскольку он извлекает список заголовков для учета из реестра глобального пути и использует их для создания ключа кеша для проверки.

Если список заголовков не сохранен, страницу необходимо перестроить, поэтому функция вернется None.

learn_cache_key( запрос , ответ , cache_timeout = None , key_prefix = None , cache = None )

Узнает, какие заголовки следует учитывать для некоторого пути запроса от объекта ответа. Он сохраняет эти заголовки в глобальном реестре путей, чтобы при последующем доступе к этому пути было известно, какие заголовки следует учитывать, без создания самого объекта ответа. Заголовки указаны в Varyзаголовке ответа, но мы хотим предотвратить генерацию ответа.

Список заголовков, используемых для генерации ключей кеша, хранится в том же кэше, что и сами страницы. Если кеш устаревает некоторые данные из кеша, это означает, что мы должны создать ответ один раз, чтобы получить заголовок Vary и, следовательно, список заголовков, которые будут использоваться для ключа кеша.

django.utils.dateparse

Функции, определенные в этом модуле, имеют следующие общие свойства:

  • Они принимают строки в форматах даты и времени ISO 8601 (или некоторых близких альтернативах) и возвращают объекты из соответствующих классов в datetimeмодуле Python .
  • Они повышаются, ValueErrorесли их ввод хорошо отформатирован, но не является допустимой датой или временем.
  • Они возвращаются, Noneесли он вообще не отформатирован.
  • Они принимают на входе разрешение до пикосекунды, но усекают его до микросекунд, поскольку это поддерживает Python.
parse_date( значение )

Разбирает строку и возвращает datetime.date.

parse_time( значение )

Разбирает строку и возвращает datetime.time.

Смещения UTC не поддерживаются; если valueописывает один, результат будет None.

Изменено в Django 3.1:

Добавлена ​​поддержка разделителей запятой для миллисекунд.

parse_datetime( значение )

Разбирает строку и возвращает datetime.datetime.

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

Изменено в Django 3.1:

Добавлена ​​поддержка разделителей запятой для миллисекунд.

parse_duration( значение )

Разбирает строку и возвращает datetime.timedelta.

Ожидает данные в формате , или как определено ISO 8601 (например, что эквивалентно ) или в формате дневного интервала PostgreSQL (например )."DD HH:MM:SS.uuuuuu""DD HH:MM:SS,uuuuuu"P4DT1H15M20S4 1:15:203 days 04:05:06

Изменено в Django 3.1:

Добавлена поддержка разделителей запятой для десятичных дробей в формате ISO 8601 и для этого формата ."DD HH:MM:SS,uuuuuu"

django.utils.decorators

method_decorator( декоратор , name = '' ) [источник]

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

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

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

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( промежуточное ПО ) [источник]
Новое в Django 3.1.

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

async_only_middleware( промежуточное ПО ) [источник]
Новое в Django 3.1.

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

sync_and_async_middleware( промежуточное ПО ) [источник]
Новое в Django 3.1.

Помечает промежуточное ПО как совместимое с синхронизацией и асинхронностью , что позволяет избежать преобразования запросов. Чтобы использовать этот декоратор, необходимо реализовать определение текущего типа запроса. Подробнее см. Документацию по асинхронному промежуточному программному обеспечению .

django.utils.encoding

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

Возвращает strобъект, представляющий произвольный объект s. Обрабатывает байтовые строки с помощью encodingкодека.

Если strings_onlyесть True, не конвертируйте (некоторые) объекты, не похожие на строки.

is_protected_type( объект )

Определите, относится ли экземпляр объекта к защищенному типу.

Объекты защищенных типов сохраняются как есть при передаче в 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.

Псевдоним force_str()для обратной совместимости, особенно в коде, поддерживающем Python 2.

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

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

Псевдоним force_str()для обратной совместимости, особенно в коде, поддерживающем Python 2.

iri_to_uri( ири )

Преобразуйте часть интернационализированного идентификатора ресурса (IRI) в часть URI, которая подходит для включения в URL.

Это алгоритм из раздела 3.1 RFC 3987 # section-3.1 , немного упрощенный, поскольку предполагается, что ввод является строкой, а не произвольным потоком байтов.

Принимает IRI (строку или байты UTF-8) и возвращает строку, содержащую закодированный результат.

uri_to_iri( ури )

Преобразует унифицированный идентификатор ресурса в интернационализированный идентификатор ресурса.

Это алгоритм из раздела 3.2 RFC 3987 # раздел-3.2 .

Принимает URI в байтах ASCII и возвращает строку, содержащую закодированный результат.

filepath_to_uri( путь )

Преобразуйте путь файловой системы в часть URI, которая подходит для включения в URL. Предполагается, что путь представляет собой байты UTF-8, строку или Path.

Этот метод будет кодировать определенные символы, которые обычно распознаются как специальные символы для URI. Обратите внимание, что этот метод не кодирует символ ', поскольку это допустимый символ в URI. Смотрите encodeURIComponent()функцию JavaScript для более подробной информации.

Возвращает строку ASCII, содержащую закодированный результат.

Изменено в Django 3.1:

Поддержка была добавлена.pathlib.Path path

escape_uri_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 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 , дата )

Создает TagURI.

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

SyndicationFeed

класс SyndicationFeed

Базовый класс для всех каналов распространения. Подклассы должны предоставлять write ().

__init__( Название , ссылка , описание , язык = None , author_email = None , author_name = None , author_link = None , подзаголовок = None , категории = None , FEED_URL = None , feed_copyright = None , feed_guid = None , ТТЛ = None , ** kwargs )

Инициализируйте канал с заданным словарем метаданных, который применяется ко всему каналу.

Любые дополнительные аргументы ключевого слова, которым вы передадите, __init__будут сохранены self.feed.

Все параметры должны быть строками, за исключением categoriesпоследовательности строк.

add_item( название , ссылка , описание , author_email = Нет , author_name = Нет , author_link = Нет , pubdate = Нет , комментарии = Нет , unique_id = Нет , категории = () , item_copyright = Нет , ttl = Нет , updateddate = Нет , вложения = Нет , ** kwargs )

Добавляет элемент в ленту. Ожидается, что все аргументы будут строками, кроме pubdateи updateddate, которые являются datetime.datetime объектами, и enclosures, которые являются списком Enclosureэкземпляров.

num_items()
root_attributes()

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

add_root_elements( обработчик )

Добавьте элементы в корневой (т. Е. Канал / канал) элемент. Вызывается из write().

item_attributes( элемент )

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

add_item_elements( обработчик , предмет )

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

write( выход , кодировка )

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

writeString( кодировка )

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

latest_post_date()

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

Enclosure

класс Enclosure

Представляет вложение RSS

RssFeed

классRssFeed ( SyndicationFeed )

Rss201rev2Feed

классRss201rev2Feed ( RssFeed )

Спецификация: https://cyber.harvard.edu/rss/rss.html

RssUserland091Feed

классRssUserland091Feed ( RssFeed )

Спецификация: http://backend.userland.com/rss091

Atom1Feed

классAtom1Feed ( SyndicationFeed )

Спецификация: RFC 4287

django.utils.functional

classcached_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) в a, к cached_propertyкоторому не было доступа, возрастает AttributeError.

Помимо потенциальных преимуществ в производительности, он @cached_property может гарантировать, что значение атрибута не изменится неожиданно в течение срока службы экземпляра. Это могло произойти с методом, на котором основаны вычисления datetime.now(), или если изменение было сохранено в базе данных каким-либо другим процессом в короткий интервал между последующими вызовами метода в том же экземпляре.

Вы можете делать кешированные свойства методов. Например, если у вас есть дорогой get_friends()метод и вы хотите разрешить его вызов без извлечения кэшированного значения, вы можете написать:

friends = cached_property(get_friends, name='friends')

Вам нужен только nameаргумент для поддержки Python <3.6.

Хотя 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
classclassproperty ( method = None ) [источник]
Новое в 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( текст )

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

conditional_escape( текст )

Аналогично escape(), за исключением того, что он не работает с предварительно экранированными строками, поэтому он не будет выполнять двойное экранирование.

format_html( format_string , * args , ** kwargs )

Это похоже на str.format(), за исключением того, что подходит для создания фрагментов HTML. Все аргументы и kwargs 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 )

Обертка 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( значение )

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

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

Например:

strip_tags(value)

Если value- возвращаемое значение будет ."<b>Joel</b> <button>is</button> a <span>slug</span>""Joel is a slug"

Если вы ищете более надежное решение, обратите внимание на библиотеку bleach Python.

html_safe()

__html__()Метод на классе помогает шаблонам без Джанго обнаружить классы, вывод не требует HTML маскирования.

Этот декоратор определяет __html__()метод на украшенном классе, обернув __str__()в mark_safe(). Убедитесь, что __str__()метод действительно возвращает текст, который не требует экранирования HTML.

django.utils.http

urlencode( запрос , доза q = Ложь )

Версия функции Python, urllib.parse.urlencode()которая может работать с MultiValueDictнестроковыми значениями.

http_date( epoch_seconds = Нет )

Форматирует время в соответствии с RFC 1123 # section-5.2.14 формат даты, указанный в HTTPRFC 7231 # section-7.1.1.1 .

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

Выводит строку в формате .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 (например, '<'), в соответствующие объекты.

класс SafeString[источник]

strПодкласс , который был специально отмечен как «безопасный» (не требует дальнейшей вытекание) для вывода HTML целей.

mark_safe( s ) [источник]

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

Может вызываться несколько раз для одной строки.

Также может использоваться как декоратор.

Для создания фрагментов HTML вы обычно должны использовать django.utils.html.format_html()вместо него.

Строка, помеченная как безопасная, снова станет небезопасной в случае изменения. Например:

>>> mystr = '<b>Hello World</b>   '
>>> mystr = mark_safe(mystr)
>>> type(mystr)
<class 'django.utils.safestring.SafeString'>

>>> mystr = mystr.strip()  # removing whitespace
>>> type(mystr)
<type 'str'>

django.utils.text

format_lazy( format_string , * args , ** kwargs )

Версия str.format()для когда format_string, argsи / или kwargsсодержать ленивые объекты. Первый аргумент - это форматируемая строка. Например:

from django.utils.text import format_lazy
from django.utils.translation import pgettext_lazy

urlpatterns = [
    path(format_lazy('{person}/<int:pk>/', person=pgettext_lazy('URL', 'person')),
         PersonDetailView.as_view()),
]

Этот пример позволяет переводчикам переводить часть URL-адреса. Если «человек» переводится как «персона», регулярное выражение будет соответствовать persona/(?P<pk>\d+)/$, например persona/5/.

slugify( значение , allow_unicode = False )

Преобразует строку в URL-адрес:

  1. Преобразование в ASCII, если allow_unicodeесть False(по умолчанию).
  2. Преобразование в нижний регистр.
  3. Удаление символов, не являющихся буквенно-цифровыми, подчеркиваниями, дефисами или пробелами.
  4. Замена любых пробелов или повторяющихся дефисов одиночными дефисами.
  5. Удаление начальных и конечных пробелов, дефисов и подчеркиваний.

Например:

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

Если вы хотите разрешить использование символов Юникода, пройдите allow_unicode=True. Например:

>>> slugify('你好 World', allow_unicode=True)
'你好-world'
Изменено в Django 3.2:

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

django.utils.timezone

utc

tzinfo Экземпляр, представляющий UTC.

get_fixed_timezone( смещение )

Возвращает 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Аргумент должен быть экземпляром tzinfo подкласса или имя часового пояса.

deactivate()

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

override( часовой пояс )

Это диспетчер контекста Python, который устанавливает текущий часовой пояс при входе activate()и восстанавливает ранее активный часовой пояс при выходе. Если timezoneаргумент равен None, текущий часовой пояс не устанавливается при входе с deactivate().

override также можно использовать в качестве декоратора функций.

localtime( значение = Нет , часовой пояс = Нет )

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

Если valueне указано, по умолчанию используется now().

Эта функция не работает на простых датах; используйте make_aware() вместо этого.

localdate( значение = Нет , часовой пояс = Нет )

Использование localtime()для преобразования осознаваемого datetimeк date()в другом часовом поясе, по умолчанию текущего часового пояса .

Если valueне указано, по умолчанию используется now().

Эта функция не работает на простых датах.

now()

Возвращает datetime, представляющий текущий момент времени. Что именно возвращается, зависит от значения USE_TZ:

  • Если USE_TZесть False, то это будет наивный DateTime (т.е. Заданы без соответствующей временной зоны) , которая представляет текущее время в локальном часовом поясе системы.
  • Если USE_TZесть True, то это будет знать , дата и время , представляющее текущее время в формате UTC. Обратите внимание, что время now()всегда будет возвращаться в формате UTC независимо от значения TIME_ZONE; вы можете использовать localtime()для получения времени в текущем часовом поясе.
is_aware( значение )

Возвращает, Trueесли valueв курсе, Falseесли наивно. Эта функция предполагает, что valueэто файл datetime.

is_naive( значение )

Возвращает, Trueесли valueнаивно, Falseесли в курсе. Эта функция предполагает, что valueэто файл datetime.

make_aware( значение , часовой пояс = Нет , is_dst = Нет )

Возвращает осведомленность datetime, представляющую тот же момент времени, что и valueв timezone, valueбудучи наивным datetime. Если timezoneустановлено значение None, по умолчанию используется текущий часовой пояс .

При использовании pytz, то pytz.AmbiguousTimeErrorвозбуждается исключение , если вы пытаетесь сделать в valueкурсе во время перехода ДСТ , где в то же время происходит дважды (при отмене из DST). Настройка is_dstна Trueили Falseпозволит избежать исключения, выбрав время до перехода или после перехода соответственно.

При использовании pytz, то pytz.NonExistentTimeErrorвозбуждается исключение , если вы пытаетесь сделать в valueкурсе во время летнего времени перехода, что время не произошло. Например, если 2 часа пропущены во время перехода на летнее время, попытка сообщить 2:30 в этом часовом поясе вызовет исключение. Чтобы избежать этого, вы можете использовать, is_dstчтобы указать, как make_aware()следует интерпретировать такое несуществующее время. Если is_dst=Trueтогда указанное выше время будет интерпретировано как 2:30 по летнему времени (эквивалентно 1:30 по местному времени). И наоборот, если is_dst=Falseбы время интерпретировалось как 2:30 по стандартному времени (эквивалент 3:30 по местному времени).

is_dstПараметр не имеет никакого эффекта при использовании Непро- pytzреализации часового пояса.

make_naive( значение , часовой пояс = Нет )

Возвращает наивное, datetimeкоторое представляет в timezone тот же момент времени value, valueчто и осознающее datetime. Если timezoneустановлено значение None, по умолчанию используется текущий часовой пояс .

django.utils.translation

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

gettext( сообщение )

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

pgettext( контекст , сообщение )

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

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

gettext_lazy( сообщение )
pgettext_lazy( контекст , сообщение )

То же, что и вышеприведенные неленивые версии, но с ленивым выполнением.

См. Документацию по ленивым переводам .

gettext_noop( сообщение )

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

ngettext( единственное , множественное , число )

Переводит singularи pluralвозвращает соответствующую строку на основе number.

npgettext( контекст , единственное число , множественное число , число )

Переводит singularи pluralвозвращает соответствующую строку на основе numberи context.

ngettext_lazy( единственное , множественное , число )
npgettext_lazy( контекст , единственное число , множественное число , число )

То же, что и вышеприведенные неленивые версии, но с ленивым выполнением.

См. Документацию по ленивым переводам .

activate( язык )

Выбирает объект перевода для заданного языка и активирует его как текущий объект перевода для текущего потока.

deactivate()

Деактивирует текущий активный объект перевода, так что дальнейшие вызовы _ снова будут разрешаться против объекта перевода по умолчанию.

deactivate_all()

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

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

Повышается, LookupErrorесли ничего не найдено.

to_locale( язык )

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

templatize( SRC )

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

LANGUAGE_SESSION_KEY

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

Не рекомендуется с версии 3.0: Язык не будет сохранен в сеансе Django 4.0. LANGUAGE_COOKIE_NAMEВместо этого используйте cookie.

Copyright ©2021 All rights reserved