2012-02-25 3 views
3

Est-il possible de créer un modèle django pouvant être utilisé (imbriqué) dans un autre modèle django? Je connais la commande extends, mais je ne pense pas que ce soit ce que je cherche. Peut-être que je ne sais pas comment le faire fonctionner pour cette situation. Laissez-moi vous donner un exemple.Utilisation de modèles Django comme extraits

Il est courant dans la plupart des webapps d'afficher le statut de connexion de l'utilisateur, je cherche un moyen de mettre la logique pour cela (avec les "Bienvenue Mr. Foo" et "Besoin de s'inscrire?" un petit modèle, comme ceci:

loginstatus.html

{% if LoggedIn %} 
    Message message link link 
{% else %} 
    Other message different link 
{% endif %} 

maintenant, je me dis que je vais devoir appeler le moteur de rendu et de stocker cette sortie dans une variable, puis passer que le modèle de base lorsque Je le rends, de sorte que mon modèle de base ressemble à ceci:

index.html

<html> 
    <head> 
    </head> 
    <body> 
    <div id="Header">{{ LoginStatus }}</div> 
    </body> 
</html> 

Maintenant, je sais que c'est un exemple assez boiteux, il ne m'a sauvé 5 lignes, mais j'enVision faire cela pour créer une barre de navigation basée sur le rôle de l'utilisateur, l'affichage d'un flux de nouvelles en ce qui concerne Donc, en bref, est-il possible (parce que je n'ai pas été capable de le faire fonctionner comme je l'imagine) de pré-rendre un modèle de django, puis d'inclure cela dans la position de l'utilisateur ou dans l'intérêt sélectionné?

rendu html dans un autre modèle de django?

Je ne pense pas que cela importe, mais je travaille avec Google App Engine également, si cela change quoi que ce soit.

Répondre

6

Pour cet exemple particulier, vous pouvez utiliser la balise include pour inclure un extrait.

Pour la barre de navigation et d'alimentation nouvelles, custom template tags - en particulier, les balises d'inclusion - serait plus approprié.

+0

Fonctionne parfaitement, dans les versions .96 et 1.2 de Django (c'est ce que GAE est livré avec). Je vous remets une coche à la fois pour pointer vers une solution aussi élégante et pour me rappeler que je dois vraiment lire ces manuels un peu plus avant de commencer à penser à ces choses. Je n'ai pas encore vérifié les balises de modèle personnalisé, mais je le ferai. – Timbermar