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

Django включает шаблон из другого приложения

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

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

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

4b9b3361

Ответ 1

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

{% 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" %} и переопределить раздел содержимого

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