Функция import_string
Функция import_string из модуля django.utils.module_loading
позволяет импортировать объекты (классы, функции, переменные)
по их строковому пути. Это удобно, когда нужно динамически
загружать объекты на основе конфигурации или пользовательского ввода.
Функция принимает строку с полным путем к объекту и возвращает
сам объект, готовый к использованию.
Синтаксис
from django.utils.module_loading import import_string
obj = import_string('path.to.module.ClassName')
Параметры функции:
-
dotted_path- строка, содержащая путь к объекту в формате'module.submodule.ClassName'
Пример
Давайте импортируем модель Article и получим все записи
из базы данных:
from django.utils.module_loading import import_string
# Импортируем модель Article
Article = import_string('myapp.models.Article')
# Используем модель
res = Article.objects.all()
print(res)
Результат выполнения кода:
[<Article: article 1>, <Article: article 2>, <Article: article 3>]
Функция импортирует указанный класс и возвращает его, после чего с ним можно работать как с обычным классом.
Пример
Рассмотрим импорт функции для динамического форматирования даты и времени:
from django.utils.module_loading import import_string
from datetime import datetime
# Импортируем функцию для форматирования
format_func = import_string('django.utils.timezone.localtime')
# Используем импортированную функцию
now = datetime.now()
res = format_func(now)
print(res)
Результат выполнения кода:
"2026-09-07 15:30:45+03:00"
Функция успешно импортировала метод localtime
и применила его к объекту даты.
Пример
Импортируем класс из стандартной библиотеки Python:
from django.utils.module_loading import import_string
# Импортируем класс datetime из стандартной библиотеки
datetime_class = import_string('datetime.datetime')
# Создаём объект datetime
res = datetime_class(2026, 9, 7, 12, 0, 0)
print(res)
Результат выполнения кода:
"2026-09-07 12:00:00"
Функция может импортировать не только объекты Django, но и любые другие объекты из установленных пакетов.
Пример
Рассмотрим обработку ошибок при импорте:
from django.utils.module_loading import import_string
from django.core.exceptions import ImproperlyConfigured
try:
# Пытаемся импортировать несуществующий класс
obj = import_string('myapp.models.NonExistentClass')
except ImproperlyConfigured as e:
res = f"Error: {e}"
print(res)
Результат выполнения кода:
"Error: Module 'myapp.models' does not define a 'NonExistentClass' attribute/class"
При попытке импортировать несуществующий объект функция
выбрасывает исключение ImproperlyConfigured,
что позволяет обработать ошибку и предотвратить падение приложения.
Смотрите также
-
функция
lazy,
которая откладывает выполнение кода до момента использования -
декоратор
cached_property,
который кеширует результат свойства -
функция
force_str,
которая приводит значение к строке -
функция
mark_safe,
которая помечает строку как безопасную для вывода