Как я могу получить подробное имя текущего приложения в качестве переменной контекста во всех шаблонах в Django? - PullRequest
0 голосов
/ 17 апреля 2020

Мой django проект имеет приложение. Папка приложения - main_menu_app. Я не хотел всегда вводить что-то вроде:

{% url 'main_menu_app:PAGE' %}

в шаблонах, а скорее

{% url 'main_menu:PAGE' %}

, поэтому внутри моего mysite / urls.py у меня есть это:

path('main_menu/', decorator_include(login_required, ('main_menu_app.urls', 'main_menu'))),

Это название моего приложения "main_menu". Это прекрасно работает в большинстве случаев. К сожалению, недавно у меня появилась необходимость добавлять подробное имя текущего приложения в каждый шаблон в качестве переменной контекста. Я могу сделать это с помощью контекстного процессора, и обычно вы можете разрешить приложение, в котором вы находитесь, выполнив:

request.resolver_match.app_name

к сожалению, мое решение преобразуется в "main_menu", и когда я пытаюсь получить app_config с это имя (которое содержит подробное имя), оно не может найти его:

from django.apps import apps
app_name = request.resolver_match.app_name

apps.app_configs[app_name]    # KeyError: 'main_menu'
apps.app_configs
OrderedDict([..., ('main_menu_app', <MainMenuAppConfig: main_menu_app>), ...])

Есть ли какой-нибудь способ, которым я могу разрешить то, что я получаю из request.resolver_match, в app_config? Я знаю, что могу жестко закодировать имя main_menu_app, но я бы предпочел сделать это динамически, поэтому оно всегда работает для всех приложений.

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