Django: Как включить блочный сайт? - PullRequest
0 голосов
/ 14 августа 2011

Извините, это довольно просто. Я абстрагировал мою статическую HTML-панель навигации в блок, чтобы она могла динамически отображаться из модели. Я создал новый маркер блока в base.html со следующим синтаксисом

{% block navigation %}{% endblock %}

Как я могу убедиться, что это отображается на каждой странице? Нужно ли создавать какой-то средний слой для этого? Все, что я до сих пор делал, просто использовало первичный блок.

РЕДАКТИРОВАТЬ Воскресенье, 14 августа 2011 г. 11:25

Я не очень хорошо объяснил это. Содержимое навигационного блока:

{% extends 'base.html' %}

{% block navigation %}

<nav>
    <ul>
    {% for item in items %}
        <li><a href="{{ item.url }}">{{ item.name }}</a></li>
    {% endfor %}
    </ul>
</nav>

{% endblock %}

Я хочу отображать это на каждой странице, не просматривая дочерние шаблоны base.html по отдельности и добавляя их к ним, если это возможно.

Ответы [ 3 ]

2 голосов
/ 14 августа 2011

У вас есть статическая панель навигации, поэтому вы можете просто написать код на своей странице base.html и затем использовать его с тегом {% extends 'base.html' %} на каждой новой странице. Ваша разметка будет на каждой странице. Кроме того, если вы используете только тег расширений на своей дочерней странице, а затем визуализируете его, вы увидите base.html без какой-либо редакции.

Если у вас есть код, который должен появляться на нескольких страницах, но не на всех - создайте каталог «include», сохраните там код и дополните свой базовый шаблон тегом {% include %}. Это не избежит повторения, но сделает ваш код короче.

И последнее, что вам понадобится в будущем, возможно, с динамическим кодом - кеширование. С тегом {% cache %} вы можете кешировать блок на некоторое время.

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

{% block FOO%} {% endblock%} резервирует место для перезаписи в под-шаблонах.

{% include "foo.html"%} извлекает содержимое из другого файла в текущий файл.

Чтобы {% block navigation%} {% endblock%} отображался на каждой странице, вам нужно добавить контент

{% block navigation %}SHOW ME{% endblock %}
0 голосов
/ 14 августа 2011

Ваш блок здесь ничего не делает, но если вы хотите, чтобы что-то появилось во всех шаблонах, вы должны определить это в базовом шаблоне (base.html) и заставить другие расширяться от него:* base.html

Yor menu and the stuff you want to appear everywhere
{% block content %}{% endblock %}

Другой шаблон

{% extends "base.html" %}
{% block content %}
The actual content of the page
{% endblock %}
...