РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
744 of 818 menu

Функция lazy

Функция lazy применяется для создания отложенных объектов, которые вычисляются только в момент доступа к их значению. Это особенно полезно при работе с шаблонами и формами, где необходимо передавать вызовы функций, которые должны выполниться позднее. Функция принимает вызываемый объект и возвращает обёртку, которая при обращении вызывает исходный объект с переданными аргументами.

Синтаксис

from django.utils.functional import lazy lazy(func, *resultclasses)(*args, **kwargs)

Параметры

Функция lazy принимает два основных аргумента:

func - вызываемый объект, выполнение которого будет отложено до момента обращения к результату.

resultclasses - список классов, которые определяют тип возвращаемого значения и поведение при операциях сравнения или преобразования.

Пример

Давайте создадим отложенную функцию, которая возвращает текущее время только при обращении к результату:

from django.utils.functional import lazy from datetime import datetime def get_current_time(): return datetime.now().strftime("%H:%M:%S") lazy_time = lazy(get_current_time, str)() # Функция не выполнилась при создании # Выполнится только при обращении print(lazy_time)

Результат выполнения кода:

"14:25:30"

Пример

Давайте используем lazy для передачи отложенного вызова в модель с помощью поля по умолчанию:

from django.db import models from django.utils.functional import lazy from datetime import datetime def get_default_date(): return datetime.now().date() class Article(models.Model): title = models.CharField(max_length=100) created_at = models.DateField( default=lazy(get_default_date, datetime) ) def __str__(self): return self.title

Результат выполнения кода при создании объекта:

from myapp.models import Article article = Article(title="New Article") print(article.created_at)

Результат выполнения кода:

"2026-09-07"

Пример

Давайте создадим отложенную строку с преобразованием регистра для использования в шаблонах:

from django.utils.functional import lazy def process_text(text): return text.strip().upper() lazy_text = lazy(process_text, str)(" hello world ") # Выполнится только при обращении print(lazy_text)

Результат выполнения кода:

"HELLO WORLD"

Смотрите также

  • функция mark_safe,
    которая помечает строку как безопасную для вывода в HTML
  • функция escape,
    которая экранирует специальные HTML-символы
  • функция format_html,
    которая форматирует строку с безопасным HTML-выводом
  • декоратор cached_property,
    который кеширует результат выполнения метода
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить