Объединение нескольких шаблонов Django в одном запросе

StackOverflow https://stackoverflow.com/questions/408133

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top