2010-09-10 3 views
1

Страница наследования шаблонов на сайте django на самом деле не решает мою проблему (Django 1.2).Добавление шаблона Django

Моя базовая страница выглядит следующим образом:

... 
<div class="grid_12" id="content"> 
    {% block content %}{% endblock %} 
</div> 
... 
{% block javascript %}{% endblock %} 

У меня есть еще один шаблон, который определяет содержание для них:

{% block content %} 
    animated sidebar 
{% endblock %} 
... 
{% block javascript %} 
    alert('hello'); 
{% endblock %} 

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

Каков наилучший способ решить эту проблему?

EDIT

К сожалению, я не сделал себе ясно.

У меня есть мои страницы содержания, которые создают шаблон, расширяющий «base.html». В «base.html» я хочу включить шаблон боковой панели, который должен добавить блоки в «base.html». Поэтому я попытался просто положить include "sidebar.html" в "base.html", но он просто вставляет все, где находится тег include. Я хочу, чтобы это было добавление блоков в «base.html», которые сами могут быть заполнены «page.html».

Возможно, важно сказать, что «sidebar.html» полностью статичен - т. Е. С ним невозможно связать. Поэтому, возможно, этот вопрос действительно должен быть «Как включить статический шаблон в base.html, чтобы он добавлял к блокам в base.html независимо от вывода фактического представления, обрабатывающего запрос?»

ответ

1

Я думаю, вы хотите добавить к блоку? Вы можете поместить {{ block.super }}, куда хотите унаследованный контент. например .:

{% block javascript %} 
    {{ block.super }} 
    alert('hello'); 
{% endblock %} 
+1

да, но я также хочу, чтобы этот шаблон включен, где я поместил его в базовый шаблон. кажется, я могу добавлять только блоки, если я использую «extends», а затем я вхожу в бесконечный цикл. – Roger

+0

Тогда вам нужно будет отправиться на забавный маршрут и создать пользовательские теги шаблонов: http://docs.djangoproject.com/en/1.0/howto/custom-template-tags/ –

+0

@Roger, в настоящее время вы можете использовать [django- sekizai] (http://django-sekizai.readthedocs.org/en/latest/). – Paolo

0

Вы должны только использовать {% block foo %} теги для расширения блоков в базовом шаблоне, поэтому я не ясно, что вы имеете в виду, когда вы говорите, не хотите продлить его.

код, как вы вошли в нее, должны оказывать

... 
<div class="grid_12" id="content"> 
    animated sidebar 
</div> 
... 
alert(hello) 

Если вы не хотите, чтобы добавить содержимое (например, в ответ Matt «s) не ясно, что вы хотите, чтобы это произошло.

+0

Я расширил свой вопрос для ясности. – Roger

0

Вы должны использовать что-то вроде jQuery для запуска выполнения только после полной загрузки страницы. Включите библиотеку jQuery в заголовок документа, а затем где-нибудь:

$(document).ready(function() { 
    //your code goes here 
}); 
+0

проблема заключается в том, что мой js-файл включен перед jquery, потому что он не добавляется к моему блоку javascript, а просто вставляет весь шаблон в «base.html», где находится команда «include». – Roger

Смежные вопросы