Cuando se tiene "funcionalidad" (en concreto una condición if) dentro de un bucle, que tienen la oportunidad de pasar esto en la función de vista.
Primera
esta construcción
{% for physician in physicians.all %}
{% if physician.service_patients.count %}
{% endif %}
{% endfor %}
es tan común que tiene varias maneras de evitarlo.
Cambia tu modelo. Agregue una prueba patients" method and use it instead of the default query set that you get with a on-to-many relationship. This method of your model has the
if service_patients.count`, eliminándola de su plantilla.
Esto elimina el {% if%} de su plantilla, reduciéndola a {% for%} y el HTML real, que no puede eliminarse fácilmente.
Cambie su función de visualización. Escriba unas líneas de código para crear una lista de médicos con service_patients en lugar de una colección simplista de médicos. Este código en su función de vista tiene la prueba if service_patients.count
, eliminándola de su plantilla.
Esto elimina el {% if%} de su plantilla, reduciéndolo a un {% para%} y el HTML real, que no se puede eliminar fácilmente.
El punto es deshacerse de la {% if%} de manera que usted es simplemente cortando y pegando el {% for%} y el código HTML real. Al mantener su plantilla a sólo el HTML (que no se pueden eliminar), la única cabeza es el {% for%}
Segunda
Parece que desea volver a utilizar una {% include %}
construir en contextos ligeramente diferentes .
No está del todo claro cuál es el problema con este archivo {% include %}
. Es "esperar una lista de pacientes llamados patients
" parece superficialmente tonto. Solucionarlo, por lo que espera physician.patients
.
Quizás desee utilizar esta misma lista dos veces. Una vez con una lista llamada 'patients'
y una vez con una lista llamada 'physician.patients'
. En este caso, considere (a) simplificar o (b) escribir una etiqueta de plantilla.
Parece que tiene una lista de pacientes que a veces es una página independiente, y otras veces se repite muchas veces en una página mucho más compleja. Repetir una lista de detalles incrustados en una lista más larga no es realmente el mejor diseño de página.Django no lo ayuda con esto porque, francamente, no es fácil de usar. De ahí la opción (a): considere rediseñar esta lista de "lista de pacientes dentro de un médico" como demasiado compleja.
Sin embargo, siempre puede escribir una plantilla de etiquetas para crear páginas realmente complejas.
Resumen
Hay una muy buena razón por la cual el lenguaje de plantillas de Django tiene una funcionalidad limitada. Toda su funcionalidad debe ser una característica esencial de su modelo o una característica de la aplicación actual que usa el modelo.
La presentación es simplemente la traducción de objetos (y conjuntos de consultas) en HTML. Nada más
¡Gracias! Seguí buscando una etiqueta "como". Creo que "con" también funciona. – slypete
A partir de Django 1.3 también puede usar el estilo: '{% include" sometemplate.html "con spam = eggs, ham =" Ham! " %} '. –