Импортирование decoreators.py в каталог верхнего уровня проекта django

Есть ли способ создать файл decorators.py в папке верхнего уровня проекта в Django, чтобы многие приложения могли его использовать?

Если файл находится в каталоге верхнего уровня и я пытаюсь импортировать его в myapp/views.py по:

from ..decorators import student_required, teacher_required

Я получаю ошибку:

    from ..decorators import student_required, teacher_required
ImportError: attempted relative import beyond top-level package

Однако при импорте таким образом:

from .decorators import student_required, teacher_required

Вывод:

    from .decorators import student_required, teacher_required
ModuleNotFoundError: No module named 'myapp.decorators'

Мне нужно использовать эти декораторы в myapp1, myapp2, myapp3 и я не хочу заполнять один и тот же файл снова и снова. Есть ли какой-нибудь быстрый обходной путь для этого? Как я могу правильно указать на decorators.py?

Все, что вам нужно для его импорта - это путь к нему. Поэтому вы можете поместить его в корень проекта и просто выполнить:

from decorators import whatever

Я бы не советовал этого делать из-за потенциальных проблем с интервалами имен.

Второй вариант - поместить его в папку проекта django, так что вы можете сделать:

from <myproject>.decorators import whatever

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

from core.decorators import whatever

Или вы можете просто создать другой модуль в корне под названием core (или любым другим) - это просто каталог, содержащий __init__.py файл, и добиться того же эффекта.

Если это большой проект, то, вероятно, вам также следует использовать пространство имен, но это уже другой вопрос :)

Добавление: Если импорт в целом вызывает проблемы, то либо вы где-то пропустили __init__.py, либо ваш PYTHONPATH настроен неправильно.

Вернуться на верх