2010-09-10 3 views
1

La page d'héritage du template sur le site django ne résout pas vraiment mon problème (Django 1.2).Inclusion du modèle Django

Ma page de base ressemble à:

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

J'ai un autre modèle qui définit le contenu de ceux-ci:

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

C'est quelque chose comme une barre latérale animée, donc je ne veux pas prolonger le modèle de base car il est auxiliaire au contenu principal de la page. Si j'utilise simplement "include", tout est placé là où la balise "include" est placée - par conséquent le javascript ne fonctionne pas car il est inclus avant l'une de ses dépendances.

Quelle est la meilleure façon de résoudre ce problème?

EDIT

Désolé, je ne me suis pas fait comprendre.

J'ai mes pages de contenu qui rendent un modèle qui étend "base.html". Dans "base.html" je veux inclure un modèle de barre latérale qui doit ajouter des blocs dans "base.html". J'ai donc essayé de mettre simplement include "sidebar.html" dans "base.html", mais il insère juste la partie où la balise "include" est. Ce que je veux faire, c'est ajouter les blocs dans "base.html", qui peuvent eux-mêmes avoir été remplis par "page.html".

Il est peut-être important de dire que "sidebar.html" est entièrement statique, c'est-à-dire qu'il n'y a pas de callable associé. Donc peut-être cette question devrait être vraiment "Comment puis-je inclure un modèle statique dans base.html afin qu'il s'ajoute aux blocs dans base.html indépendamment de la sortie de la vue réelle qui traite la demande?"

Répondre

1

Je pense que vous voulez dire que vous voulez ajouter à un bloc? Vous pouvez mettre {{ block.super }} où vous voulez que le contenu hérité aille. .: par exemple

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

+1

oui je fais, mais je veux aussi ce modèle inclus où je le place dans le modèle de base. il semble que je ne peux ajouter des blocs que si j'utilise "extends", et ensuite j'entre dans une boucle infinie. – Roger

+0

Ensuite, vous devrez aller la route amusante et faire des étiquettes de modèles personnalisés: http://docs.djangoproject.com/fr/1.0/howto/custom-template-tags/ –

+0

@Roger, de nos jours, vous pouvez utiliser [django- sekizai] (http://django-sekizai.readthedocs.org/en/latest/). – Paolo

0

Vous devez seulement utiliser {% block foo %} balises pour étendre les blocs dans un modèle de base, donc je ne suis pas clair ce que vous voulez dire quand vous dites que vous ne veulent l'étendre.

Le code, que vous avez entré, devrait rendre à

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

Sauf si vous voulez ajouter le contenu (comme dans la réponse de Matt) on ne sait pas ce que vous voulez arriver.

+0

J'ai élargi ma question pour plus de clarté. – Roger

0

Vous devez utiliser quelque chose comme jQuery pour déclencher l'exécution uniquement après le chargement complet de la page. Inclure la bibliothèque jQuery dans l'en-tête du document, puis quelque part:

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

le problème est que mon fichier js est inclus avant jquery car il ne s'ajoute pas à mon bloc javascript, mais insère juste le modèle entier dans "base.html" où la commande "include" est. – Roger