Шаблонный слой Django против шаблонного слоя SymfonyInbn - PullRequest
0 голосов
/ 09 ноября 2010

Я создаю свой первый сайт Django после использования Symfony 1.3.x для создания нескольких сайтов. Обе структуры используют шаблон MVC.

Symfony позволяет создавать «главный» шаблон (называемый макетом), а затем каждый отдельный вид используется для украшения основного макета с использованием шаблона декоратора. Это позволяет очень легко создавать страницы, использующие один и тот же слой (например, верхний / нижний колонтитулы и т. Д.), В то же время различаясь по фактическому содержанию страницы.

Я смотрю, есть ли что-то подобное в Django. Пока что все примеры, которые я видел, связаны с созданием отдельных взглядов. Делать так не СУХО, так как каждый мой шаблон представления повторяет много общих вещей (верхний / нижний колонтитулы и т. Д.).

Есть ли способ иметь «основное» представление (используя терминологию Django), которое устанавливает макет представлений, которые к нему применяются?

1 Ответ

3 голосов
/ 09 ноября 2010

Из того, что вы говорите, я думаю, что вы использовали «представление» вместо «шаблон».Если вы имели в виду «шаблон», вы должны знать, что у django есть решение этой проблемы: наследование шаблона .По сути, вы должны создать «базовый» шаблон, который будет основой каждой страницы, и определенные шаблоны будут наследовать этот шаблон.Вот краткий пример, взятый из документации django:

{% extends "base_generic.html" %}

{% block title %}{{ section.title }}{% endblock %}

{% block content %}
<h1>{{ section.title }}</h1>

{% for story in story_list %}
<h2>
  <a href="{{ story.get_absolute_url }}">
    {{ story.headline|upper }}
  </a>
</h2>
<p>{{ story.tease|truncatewords:"100" }}</p>
{% endfor %}
{% endblock %}

В документах нет примера для base_generic.html, но простой пример будет выглядеть так:* Обратите внимание, что Default title из base_generic.html будет заменен на {{ section.title }} из шаблона, который его расширяет.Если бы в шаблоне не было блока заголовка, расширяющего base_generic.html, заголовок был бы Default title.Это происходит для всех блоков.

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