Объединение нескольких шаблонов Django в одном запросе
-
03-07-2019 - |
Вопрос
Мне интересно, может ли кто-нибудь помочь мне найти наилучший подход к следующей проблеме.Я создаю веб-приложение, которое использует шаблоны Django для создания своего компонента веб-пользовательского интерфейса.Существует ряд распространенных HTML-элементов, таких как верхний / колонтитул, HTML head, masthead и т.д.Я бы хотел закодировать их один раз и "включить / объединить" их с другими шаблонами, представляющими основную функциональность приложения.
Возможно ли это с помощью шаблонов Django?Если да, то как я могу это сделать?
Решение
Вы можете использовать django extends
бирка.Допустим, у вас есть верхний и нижний колонтитулы.Вы могли бы создать шаблон, называемый, скажем, foo.django:
<h1>My HTML Header</h1>
<!-- an so on -->
{% block content %}
{% endblock %}
<!-- html footer -->
Затем вы можете создать другой шаблон, скажем, bar.django:
{% extends "foo.django" %}
{% block content %}
This overrides the content block in foo.django.
{% endblock %}
...который затем будет отображать:
<h1>My HTML Header</h1>
<!-- an so on -->
This overrides the content block in foo.django.
<!-- html footer -->
Хорошие инструкции по шаблонам django есть по адресу http://www.djangobook.com/en/1.0/chapter04/.
Другие советы
Тот Самый {% extends %}
и {% include %}
методы хороши для элементов страницы, которым не нужна дополнительная информация в контексте.
Как только вам понадобится вставить в контекст дополнительные данные из базы данных, вам пригодятся теги шаблонов.В качестве примера можно привести contrib.comments
приложение входящий в состав Django определяет {% get_comment_list %}
тег шаблона для получения комментариев, прикрепленных к данному экземпляру модели.Вот как бы вы это использовали:
<div>
{% load comments %}
{% get_comment_list for my_instance as comment_list %}
{% for comment in comment_list %}
<p><a href="{{ comment.url }}">{{ comment.name }}</a> wrote:</p>
{{ comment.comment }}
{% endfor %}
</div>
Вы могли бы сохранить это в отдельном шаблоне и {% include %}
это в других шаблонах.
Для вашего собственного контента вы можете написать свои собственные теги шаблонов.Подписаться документация.Всякий раз, когда это возможно, удобно писать теги с помощью простой тег механизм.Вы найдете удобные готовые шаблоны тегов на djangosnippets.org и тот блогосфера.
Попробуйте {% include %}
бирка.
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#include