Django включить шаблон из другого приложения - PullRequest
55 голосов
/ 31 декабря 2010

При настройке моего проекта и работе над тем, чтобы приложения не зависели, я столкнулся с проблемой.Мне бы хотелось, чтобы все шаблоны из разных приложений имели согласованный верхний и нижний колонтитулы.Вот что я пытаюсь:

myproject/
         base/
             templates/
                      header.html
                      footer.html
         app1/
             templates/
                      my_app1_page.html -> want to include 'header.html'
                                           and 'footer.html' from base app

Представьте, что есть еще много приложений, которые хотят это сделать.Это возможно и / или правильный способ сделать это?

Ответы [ 2 ]

91 голосов
/ 31 декабря 2010

Пока приложения находятся в INSTALLED_APPS и включен загрузчик шаблонов для папок приложений, вы можете включить любой шаблон из другого приложения, например ::100100

{% include "header.html" %}

... поскольку ваши шаблоны находятся непосредственно в каталоге шаблонов вашего приложения. Как правило, чтобы избежать конфликтов имен, лучше использовать:

app1/
    templates/
        app1/
            page1.html
            page2.html
app2/
    templates/
        app2/
            page1.html
            page2.html

А {% include "app1/page1.html" %} или {% include "app2/page1.html" %} ...

Но : для обеспечения единообразия внешнего вида гораздо лучше использовать шаблонное наследование, а не включение. Наследование шаблонов - это одна из действительно хороших вещей системы шаблонов Django, выбирайте наследование вместо включения всякий раз, когда это имеет смысл (большую часть времени).

Мои рекомендации:

  • Иметь базовый шаблон для вашего проекта ("base.html" является соглашением по умолчанию) с верхним и нижним колонтитулами и {%block content%} для основного контента.
  • Пусть другие ваши шаблоны наследуют форму base.html {% extends "base.html" %} и переопределяют раздел содержимого

См. Другой ответ на этот вопрос для ссылок на документ

9 голосов
/ 31 декабря 2010

Хотя вы, безусловно, можете сделать это, используя тег include и указав абсолютные пути, правильным способом работы в Django является использование Наследование шаблонов .

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