Объединение нескольких шаблонов Django в одном запросе
Мне интересно, может ли кто-нибудь помочь мне разобраться в лучшем подходе к следующей проблеме. Я создаю веб-приложение, которое использует шаблоны Django для создания своего компонента веб-интерфейса. Существует ряд общих HTML-элементов, таких как верхний/нижний колонтитул, HTML-заголовок, мачта и т.д. Я бы хотел их закодировать один раз и "включить/объединить" их с другими шаблонами, представляющими основные функциональные возможности приложения.
Возможно ли использование шаблонов Django? Если да, то как я могу это сделать?
Ответы
Ответ 1
Вы можете использовать тег 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/.
Ответ 2
Методы {% 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 и блогосфера.
Ответ 3
Попробуйте тег {% include %}
.
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#include