Импортирование 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
настроен неправильно.