¿Cuál es la forma correcta de hacer formateo condicional en Django?Django forma de formatear condicional
que tienen un modelo que contiene un campo de fecha, y me gustaría ver una lista de registros, pero el color de las filas en función del valor de dicho campo de fecha. Por ejemplo, los registros que coinciden con la fecha de hoy Quiero ser amarillo, los registros que es antes de hoy quiero verde y unos después de que quiero rojo.
En algún lugar de Django que se necesitan para hacer esa comparación, que compara la fecha actual con la fecha en el registro.
puedo ver tres lugares diferentes que la comparación se podría hacer:
- añadir un método para mi modelo, por ejemplo, el estado(), que devuelve bien 'pasado', 'presente', 'futuro' y luego usar eso en la plantilla para colorear las filas.
- En la vista en lugar de devolver un conjunto de consultas a la plantilla, pre-proceso de la lista y comparar cada registro, construir una nueva dict que contiene el 'pasado', y los valores 'presente' 'futuro' que se utilizan en la plantilla
- Crea una nueva etiqueta de plantilla que haga la comparación.
¿Cuál de estos métodos es la manera correcta de hacerlo de Django? Parece que el formateo condicional es algo que surgiría con bastante frecuencia, y como no se pueden hacer comparaciones arbitrarias en la plantilla, se necesita alguna otra solución.
Lo mismo se aplicaría para las reglas de formato más simples, por ejemplo, si quisiera mostrar una lista de calificaciones de los alumnos, y quería que las que tenían más del 80% de verde y las de menos del 30% de rojo.
Una buena solución, sin embargo, con más de un modelo, tendría que copiar el método del modelo a cada otro modelo con el que quiera hacer esto, haciendo que esta ruta sea un poco húmeda. – googletorp
Sin embargo, la herencia del modelo o una función de utilidad reduciría la duplicación de código. –
@googletorp: la pregunta no mencionaba más de un modelo. La cantidad de código requerido para hacer la asignación de los nombres de las clases es trivial y ciertamente puede ser una función separada, reutilizada o parte de una superclase. –