context_processors.py: путь к файлам? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть файлы context_processors.py в одном из моих приложений, которые я объявил в файле settings.py, и это работает. но поскольку данные файлов context_processors.py являются общими для всего проекта, я хотел бы объявить их на root моего проекта, но файлы не распознаются ...

архитектура текущего проекта

- myproject
  - myproject
  - myapp
    - context_processors.py

объявлено следующим образом в settings.py:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR,'registration/templates'),
            os.path.join(BASE_DIR,'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'myapp.context_processors.data_context_processor',    <********************
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

ожидаемая архитектура проекта

- myproject
  - myproject
    - context_processors.py
  - myapp

Как мне объявить мои файлы context_processors.py в settings.py? Я пытаюсь с os.path.join (BASE_DIR, 'context_processors.data_context_processor'), но это не работает ...

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

Используйте python модульную / пакетную точечную запись

'context_processors': [
    'myproject.context_processors.data_context_processor',    
    ...
]

Источник: https://docs.python.org/3/reference/import.html#packages

0 голосов
/ 21 апреля 2020

Как правило, когда параметр django используется для ссылки на программный компонент (модуль, класс или вызываемый объект), ожидается, что это не путь к файловой системе, а python квалифицированный путь (см. Обозначение точки, аналогично тому, как вы бы ссылались на атрибуты или методы объекта). Затем он будет динамически импортирован с использованием тех же правил разрешения, что и для любого модуля Python (вы можете прочитать об этом в Python do c).

Поскольку путь root проекта всегда должен быть первым в вашем sys.path (список каталогов python ищет модули и пакеты), если вы хотите сослаться на модуль или пакет, который на верхнем уровне вашего проекта root вы просто напрямую используете имя модуля или пакета - так же, как вы указали в настройках INSTALLED_APPS для ссылки на ваше приложение. В вашем случае my_project кажется «папкой проекта» (папка, содержащая ваши настройки, root url conf et c), которая технически является пакетом на верхнем уровне root вашего проекта, поэтому ожидается python квалифицированное имя "my_project.context_processors.data_context_processor".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...