开发者

Django template inclusion

开发者 https://www.devze.com 2023-01-15 10:57 出处:网络
The template inheritance page on the django site doesn\'t really solve my problem (Django 1.2). My base page looks like:

The template inheritance page on the django site doesn't really solve my problem (Django 1.2).

My base page looks like:

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

I开发者_开发技巧 have another template that defines content for these:

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

This is something like an animated sidebar, so I don't want to extend the base template since it's auxiliary to the main content of the page. If I just use "include", the entire thing is put where the "include" tag is placed - as a result the javascript doesn't run because it's included before one of its dependencies.

What's the best way to solve this?

EDIT

Sorry, I didn't make myself clear.

I have my content pages which render a template that extends "base.html". In "base.html" I want to include a sidebar template that needs to append blocks in "base.html". So I've tried just putting include "sidebar.html" into "base.html", but it just inserts the whole thing where the "include" tag is. What I want it to do is append the blocks in "base.html", which may themselves have been populated by "page.html".

Maybe it's important to say that "sidebar.html" is entirely static - i.e. there's no callable associated with it. So perhaps this question should really be "How can I include a static template into base.html so it will append to blocks in base.html regardless of the output of the actual view that processes the request?"


I think you mean you want to append to a block? You can put {{ block.super }} where you want the inherited content to go. e.g.:

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


You should only use {% block foo %} tags to extend blocks in a base template, so I'm not clear what you mean when you say you don't want to extend it.

The code, as you've entered it, should render to

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

Unless you want to append the content (as in Matt's answer) it's not clear what you want to happen.


You shoud be using something like jQuery to trigger execution only after the page is fully loaded. Include jQuery library in the document header and then somewhere:

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

精彩评论

暂无评论...
验证码 换一张
取 消