Подтвердить что ты не робот

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.

4b9b3361

Ответ 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 %}