Je trouve la langue du modèle de Django très limitatif. Suivant avec le principe sec de Django, j'ai un modèle que j'aimerais utiliser dans de nombreux autres modèles. Par exemple, une liste de patients:
{% for physician in physicians.all %} {% if physician.service_patients.count %} <div id="tabs-{{ forloop.counter }}"> {% include "hospitalists/patient_list.html" %} </div> {% endif %} {% endfor %}
3 Réponses :
Lorsque vous avez une "fonctionnalité" (spécifiquement une condition IF-condition) à l'intérieur d'une boucle, vous avez la possibilité de déplacer cela dans la fonction de vue.
Cette construction p> est si courante que vous avez plusieurs façons de l'éviter. P> changer votre modèle. Ajoutez une méthode Ceci élimine le {% IF%} de votre modèle, ce qui la réduise à {% pour%} et au HTML actuel, qui ne peut pas facilement être éliminé. p> li>
changez votre fonction de vue. Écrivez quelques lignes de code pour créer une liste de médecins avec service_patients au lieu d'une collection simpliste de médecins. Ce code dans votre fonction Voir la fonction Ceci élimine le {% si%}} de votre modèle, ce qui la réduise à un {% pour%} et le code HTML réel, qui ne peut pas être facilement éliminé. P> LI>
OL> Le point est de vous débarrasser de la {% si%} de sorte que vous coupez simplement et coller le {% pour%} et le HTML actuel. En gardant votre modèle à juste le HTML (qui ne peut pas être éliminé), la seule surcharge est le {% pour%} p> Il apparaît que Vous souhaitez réutiliser un Ce n'est pas du tout clair ce que le problème avec ce Peut-être que vous souhaitez utiliser cette même liste deux fois. Une fois avec une liste appelée Il apparaît que vous avez une liste de patients parfois une page autonome, et d'autres temps sont répétés plusieurs fois sur une page beaucoup plus complexe. Répéter une liste de détails incorporés dans une liste plus longue n'est pas vraiment la meilleure conception de page. Django ne vous aide pas avec cela parce que - franchement, il n'est pas facile pour les gens d'utiliser. Par conséquent, option a) - envisagez de repenser cette "liste de patients dans un médecin" comme trop complexe. P> Cependant, vous pouvez toujours écrire une étiquette de modèle pour créer des pages vraiment complexes. P> Il y a une très bonne raison pour laquelle le langage de modèle Django a une fonctionnalité limitée. Toutes vos fonctionnalités doivent être une caractéristique essentielle de votre modèle ou une fonctionnalité de l'application actuelle utilisant le modèle. P> présentation est simplement la traduction d'objets (et de requêtes) dans HTML. Rien de plus p> p>
patients "et utilisez-la au lieu du jeu de requêtes par défaut que vous obtenez avec une relation sur plusieurs. Cette méthode de votre modèle a le test code> si Service_paTentiers.Count` testez-le de votre modèle. p>
si service_patients.count code> testez-le à partir de votre modèle. P>
{% incluent%} code> construction dans des contextes légèrement différents. P>
{% inclure%} code> fichier est. Il s'agit de "attendre une liste de patients nommés
patients code>" semble superficiellement stupide. Fixez-le, donc il s'attend à
Médecin.patients Code>. P>
'patients' code> et une fois avec une liste appelée
"médecin.patients" code>. Dans ce cas, envisagez (a) simplifier ou (b) écrire une étiquette de modèle. P>
S.Lott, je ne sais pas comment cela répond même à distance à ma question sur la réutilisation de mon modèle qui attend un objet nommé des patients.
Pouvez-vous s'il vous plaît élaborer depuis que je suis toujours dans le noir?
S.Lott, merci pour la clarification. Lorsqu'il est couplé à quelque chose comme l'interface à onglets de JQuery Ui, répéter le même modèle dans un contexte plus complexe devient très utilisable. La balise avec la solution est correcte à ma question.
Répéter le même modèle dans un contexte plus complexe est mauvais pour les utilisateurs. Créer des étiquettes complexes pour rendre une interface utilisateur plus complexe est mauvaise pour les utilisateurs. L'ajout de la complexité sous toute forme est mauvaise pour les utilisateurs.
S.Lott, j'ai bien peur que tu ne te trains pas. La réutilisation d'un modèle est essentielle à presque tous les développeurs Web. Django Documentation l'encourage. Permettez-moi d'obtenir cette ligne droite, vous encouragez le double de la duplication d'un modèle et de la modifier pour vous attendre à différents noms de paramètres?
Différents noms de paramètres ne doivent pas se produire; Votre fonction de vue évite cette situation. Si vous pensez avoir besoin de paramètres de variante, vous faites quelque chose de trop complexe.
En tant que façon, vous pouvez essayer d'utiliser dans la langue de qualité Jinja . Il est plus flexible. P>
Je commence à croire que le moteur de modèles de Django est tellement limitée que cela devrait simplement être jeté aussi bien.
Utilisez le TAG:
{% for physician in physicians.all %} {% if physician.service_patients.count %} {% patient-list physician.service_patients %} {% endif %} {% endfor %}
Merci! Je continuais à chercher une balise "comme". Je suppose que "avec" fonctionne aussi.
AS de Django 1.3, vous pouvez également utiliser le style: {% incluent "Someemplate.html" avec spam = oeufs, jambon = "jambon!" %} code>.