Объединение нескольких шаблонов Django в один запрос - PullRequest
16 голосов
/ 03 января 2009

Мне интересно, может ли кто-нибудь помочь мне найти лучший подход к следующей проблеме. Я создаю веб-приложение, которое использует шаблоны Django для создания своего компонента веб-интерфейса. Существует ряд общих элементов HTML, таких как верхний и нижний колонтитулы, заголовок HTML, заголовок и т. Д. Я хотел бы один раз кодировать их и «включать / комбинировать» их с другими шаблонами, представляющими основные функциональные возможности приложения.

Возможно ли это с помощью шаблонов Django? Если да, то как мне это сделать?

Ответы [ 3 ]

35 голосов
/ 03 января 2009

Вы можете использовать тег extends от django. Скажем, у вас есть верхний и нижний колонтитулы. Вы можете создать шаблон, скажем, 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/.

13 голосов
/ 20 января 2009

Методы {% 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 %} в других шаблонах.

Для вашего собственного контента вы можете написать свои собственные шаблоны тегов. Следуйте документации . Когда это возможно, удобно писать теги с помощью механизма simple tag . Вы найдете удобные готовые теги шаблонов на djangosnippets.org и blogosphere .

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