django: à l'aide de blocs dans les modèles inclus
J'ai quelques structures html qui sont réutilisés dans d'assez peu d'endroits différents. C'est différent d'un ensemble de modèle donc je ne peux pas l'étendre, il peut également être utilisé pour contenir de contenu complexe donc je ne pense pas que le définissant comme une balise de modèle fait un bon travail. Ci-dessous quelques pseudo-code décrivant mon résultat souhaité, lors de l'utilisation de template_level2.html vous pouvez facilement mettre des trucs dans le reusable_pattern_template en appelant le bloc à l'intérieur. Si je ne l'utilisation de ce code, ce que vous écrivez dans "contenu" de template_level_2.html ne pas s'afficher. Comment dois-je faire avec cela?
base.html
<html>
<head></head>
<body>
{% block content %}{% endblock %}
</body>
</html>
template_level1.html
{% extends 'base.html' %}
{% block content %}
Something here...
{% include 'reusable_pattern_template.html' %}
Something else here...
{% endblock %}
reusable_pattern_template.html
<div>
<div>
<div>
{% block local_content %}{% endblock %}
</div>
</div>
</div>
template_level2.html
{% extends 'template_level1.html' %}
{% block local_content %}
Actual content here...
{% endblock %}
mise à jour:
Désolé, les étend dans template_level2.html a des fautes d'orthographe, je viens de le corriger.
Il peut ne pas être très clair, mais le code ci-dessus est plus un pseudo-code décrivant mon résultat souhaité. En bref,
- Je voudrais inclure de petits morceaux de réutilisables html des modèles dans mon
des modèles de. - Ces modèles sont comme des boîtes, que vous pouvez mettre ensemble les morceaux de html
contenu en eux. Donc, les variables de contexte peut être un peu de trop limitée pour
mon but
- Semble comme
template_level2.html
n'est jamais appelée. Et si vousinclude
certains blocs de code, vous n'avez pas besoin d'utiliserblock
déclaration devra comprendre quand et ce que vous voulez - Salut fastreload!
template_level2.html
est le dernier niveau du modèle si ce n'est pas incluse/étendu n'importe où. En appelant{% block %}
déclaration danstemplate_level2.html
, j'avais l'intention de mettre du contenu dansreusable_pattern_template.html
, qui est utilisé danstemplate_level2.html
- Question: pourquoi ne pas utiliser django-générique-flatblocks ? C'est une application fantastique qui fournit un excellent modèle.
- template_level2.html sans les guillemets, est interprété comme la variable qui doit correspondre à la chaîne ou le Modèle objet. Lire plus à propos de extends
Vous devez vous connecter pour publier un commentaire.
Django ne pas traiter des blocs dans les fichiers inclus.
include
pour ce scénario correspond bien à la définition.Il semble que le dernier modèle est en train de s'étendre lui-même (si c'est dans les guillemets).
Que vous n'avez vraiment pas besoin de beaucoup plus de complexité. C'est en fait assez beaucoup plus simple.
Le modèle de base doit contenir le squelette de votre modèle, vous pouvez l'étendre à effectuer des personnalisations. Pour réutilisables blocs de code que vous ne souhaitez pas inclure dans tous vos avis,
include
, le cas échéant, mais ne pas utiliser n'importe quelblock
,extends
ouinclude
déclaration dans le fichier inclus. Django va pas analyser ces mais lecontext variable
passé à partir de la vue peut encore être utilisé.Je suis tombé sur ce problème et a terminé avec la suite de compromis, en espérant que quelqu'un d'autre pourrait trouver utile. Il repose sur l'utilisation de
with
blocs à l'enfant des modèles.base.html veut réutiliser un commun nav.html comprendre, mais de définir un certain nombre de blocs où les variables à l'intérieur de nav.html pourrait être remplacé par des enfants modèles.
L'inclure modèle dépend d'une variable appelée
selected
, qui base.html ne définit pas, par défaut:Mais les pages enfant peut remplacer cette valeur comme suit:
donc, il n'est pas parfait, j'ai encore deux blocs distincts et d'utiliser ces
with
blocs de deux fois, mais il ne me permettent de remplacer des variables dansinclude
pâtés de maisons du modèle parent.Vous pourriez diviser reusable_pattern_template en de début et de fin des modèles. Ensuite, au niveau 1, vous pouvez aller inclure commencer, bloc, comprennent à la fin.
Vous pouvez également passer un nom de modèle dans reusable_pattern_template comme une variable de contexte et de l'inclure dans reusable_pattern_template. Cela nécessitera la modification de la relation entre le niveau 1 et de niveau 2 dans votre exemple, mais est généralement plus puissant.