Могу ли я ссылаться на URL проекта в шаблонах Django, указав название проекта? - PullRequest
1 голос
/ 16 мая 2019

У меня есть проект Django под названием reports с приложениями report_1, report_2 и т. Д.

По некоторым причинам я хочу рассматривать проект как приложение, поэтому я добавил reports к INSTALLED_APPS вместе с report_1 и report_2, а также создал файл views.py и папку templates в Основная папка проекта (где settings.py сидит).

В urls.py я добавил app_name = reports.

Однако вызов URL из шаблона будет работать только в том случае, если я пропущу имя приложения: поэтому {% url 'reports:index' %} выдаст

'reports' не является зарегистрированным пространством имен '

ошибка, но {% url 'index' %} будет работать.

Почему это так? Я думал, что Django обходит все приложения, перечисленные в INSTALLED_APPS, ищет app_name (который предоставляется) и сопоставляет его с именем URL.

Ответы [ 2 ]

1 голос
/ 16 мая 2019

app_name не работает в конфиге корневого URL. См. ticket 28413 и это обсуждение в списке рассылки django-developers.

Если вы действительно хотите включить некоторые шаблоны в пространство имен report, вы можете включить 2-кортеж, содержащий список шаблонов URL и пространство имен.

reports_patterns = ([
    path('myurl', views.my_view, name='myview'),
], 'reports')

urlpatterns = [
    ...
    path('', include(reports_patterns)
    ...
]

Затем вы можете использовать {% url 'reports:myview' %} в шаблоне.

См. Документы в пространствах имен URL и включенных URLconfs для получения дополнительной информации

0 голосов
/ 16 мая 2019

Вы можете добавить:

app_name = 'polls'

в вышеупомянутом urls.py, в каком приложении вы используете:

    urlpatterns=[
....
]

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

{% url 'appname:index.html' %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...