Django - Как иметь общие шаблоны шаблонов проекта, которые доступны для всех моих приложений в этом проекте
Второе время просят подробнее...
Я хотел бы иметь общий каталог templagetags проекта, чтобы иметь общий
теги, используемые всеми приложениями, тогда каждое приложение может иметь свои собственные теги, если это необходимо.
Скажем, что у меня есть:
proj1/app1
proj1/app1/templatetags/app1_tags.py
proj1/app2
proj1/app2/templatetags/app2_tags.py
proj1/templatetags/proj1_tags.py
proj1/templates/app1/base.html
proj1/templates/app1/index.html
proj1/templates/app2/base.html
proj1/templates/app2/index.html
Где:
proj1/templates/app1/base.html
-----------
{% load proj1_tags %}
{% load app1_tags %}
proj1/templates/app1/index.html
-----------
{% extends "base.html" %}
proj1/templates/app2/base.html
-----------
{% load proj2_tags %}
{% load app2_tags %}
proj1/templates/app2/index.html
-----------
{% extends "base.html" %}
Будет ли это работать? Это не сработало для меня. Он не может найти загрузку proj1_tags.
Ответы
Ответ 1
Я не знаю, правильно ли это сделать, но в моих приложениях Django я всегда размещаю общие теги шаблонов в приложении lib
, например:
proj/
__init__.py
lib/
__init__.py
templatetags/
__init__.py
common_tags.py
Просто добавьте приложение lib
в список INSTALLED_APPS
в settings.py
.
Ответ 2
Начиная с Django 1.9, больше нет необходимости создавать дополнительное приложение common
, как упоминалось выше. Все, что вам нужно сделать, это добавить путь к вашему проекту templatetags
в каталог settings.py
OPTION['libraries']
dict.
После этого эти теги будут доступны во всем вашем проекте. Папка templatetags
может быть размещена там, где вам нужно, и может также иметь другое имя.
Индивидуальный пример из Django docs:
OPTIONS={
'libraries': {
'myapp_tags': 'path.to.myapp.tags',
'project_tags': 'project.templatetags.common_extras',
'admin.urls': 'django.contrib.admin.templatetags.admin_urls',
},
}
Ответ 3
Django регистрирует templatetags глобально для каждого приложения в INSTALLED_APPS
(и поэтому ваше решение не работает: project - это не приложение, которое понимается Django) — они доступны во всех шаблонах (при условии, что они были правильно зарегистрированы).
У меня обычно есть приложение, которое обрабатывает разные функции (например, начальную страницу сайта) и ставит templatetags, не связанные с каким-либо конкретным приложением, но это чисто косметическое.
Ответ 4
Django работает приложением. Они относятся к настройке INSTALLED_APPS.
Я предлагаю вам разделить все, что связано с другим приложением. Для вашей проблемы с templatetags вы можете создать приложение под названием "common_tags". Затем настройте параметры INSTALLED_APPS, чтобы использовать его, и вы сможете загружать общие теги из любых шаблонов, например:
{% load XXXX %}