Шаблоны страниц расширяющие - PullRequest
1 голос
/ 22 августа 2011

Предположим, я хочу много раз повторять простую структуру HTML на моем сайте.Например, я хочу отобразить некоторые части страниц «в зеленых полях».

Первый обязательный шаг для достижения этой цели - создать файл шаблона, подобный следующему:

<!-- greenbox.html -->
<div style="background-color:#88ff88;"><br>
{% block content %}<br>
{% endblock %}<br>
</div>

Затем каждый раз, когда мне нужен этот предопределенный шаблон, я должен создать отдельный шаблон, подобный следующему:

<!-- pagepart_1.html -->
{% extends "greenbox.html" %}
{% block content %}
This time I want to add this dummy text in here
{% endblock %}

<!-- pagepart_2.html -->
{% extends "greenbox.html" %}
{% block content %}
The second time I want to add some other text
{% endblock %}

Фактическая страница, содержащая зеленые поля, будет выглядеть следующим образом:

<html><head>My Page</head>
<body>
<h1>Page Title</h1>
{% include "pagepart_1.html" %}
<br /><br />
{% include "pagepart_2.html" %}
</body></html>

Такой подход работает, но я думаю, что он содержит немного накладных расходов.Могу ли я избежать создания отдельных шаблонов для каждого экземпляра (pagepart_1.html, pagepart_2.html, ...)?

Так можно ли заставить мою главную страницу выглядеть примерно так?

<html><head>My Page</head>
<body>
<h1>Page Title</h1>
{% unkowntag extend "greenbox.html" %}
{% block content %}
This time I want to add this dummy text in here
{% endblock %}
{% endunknowntag %}
<br /><br />
{% unkowntag extend "greenbox.html" %}
{% block content %}
The second time I want to add some other text
{% endblock %}
{% endunknowntag %}
</body></html>

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

Я бы написал собственный тег, который генерирует HTML, и использовал бы его несколько раз.

0 голосов
/ 22 августа 2011

Это единственный доступный подход, если вы хотите разрешить полностью настраиваемые области содержимого.Однако, если вы можете стандартизировать контент, например, чтобы он всегда отображал неупорядоченный список, вы можете сделать:

<!-- greenbox.html -->
<div style="background-color:#88ff88;"><br>
    <ul>
        {% for item in list %}
        <li>{{ item }}</li>
        {% endfor %}
    </ul>
</div>

А затем в своем шаблоне:

<!-- mypage.html -->
{% with something as list %}
   {% include 'greenbox.html' %}
{% endwith %}

Вы можете создавать гораздо более сложные структуры и даже передавать несколько переменных (в Django 1.3 +):

<!-- greenbox.html -->
<div style="background-color:#88ff88;"><br>
    <h2>{{ title }}</h2>
    <img style="float:{{ float }};" src="{{ image }}" alt="{{ alt_text }}">
    <p>{{ description }}</p>
</div>

<!-- mypage.html -->
{% with title=obj.title image=obj.image.name alt_text=obj.title float="left" description=obj.description %}
   {% include 'greenbox.html' %}
{% endwith %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...