Django - Как сделать теги шаблона для всего проекта общими для всех моих приложений в этом проекте - PullRequest
30 голосов
/ 21 мая 2009

Второй раз спрашиваю подробнее ...

Я бы хотел иметь общий каталог 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 для загрузки.

Ответы [ 4 ]

42 голосов
/ 21 мая 2009

Я не знаю, является ли это правильным способом сделать это, но в моих приложениях Django я всегда помещаю общие теги шаблонов в lib "приложение", например так:

proj/
    __init__.py
    lib/
        __init__.py
        templatetags/
            __init__.py
            common_tags.py

Просто добавьте приложение lib в список INSTALLED_APPS в settings.py.

15 голосов
/ 05 января 2017

Начиная с Django 1.9, больше нет необходимости создавать дополнительное приложение common, как уже упоминалось. Все, что вам нужно сделать, это добавить путь к каталогу templatetags вашего проекта в settings.py s 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 голосов
/ 21 мая 2009

Django регистрирует теги шаблонов глобально для каждого приложения в INSTALLED_APPS (и именно поэтому ваше решение не работает: проект не является приложением , как понимает Django) & mdash; они доступны во всех шаблонах (при условии, что они были правильно зарегистрированы).

У меня обычно есть приложение, которое обрабатывает различные функции (например, стартовую страницу сайта) и помещает там теги-шаблоны, не связанные с каким-либо конкретным приложением, но это чисто косметическое решение.

0 голосов
/ 17 октября 2014

Джанго работает в App. Они указаны в настройке INSTALLED_APPS.

Я предлагаю вам разделить все, что связано с другим приложением. Для вашей проблемы с тегами-шаблонами вы можете создать приложение с именем common_tags. Затем настройте параметры INSTALLED_APPS, чтобы использовать его, и вы сможете загрузить свои общие теги из любых шаблонов, например:

{% load XXXX %}
...