Quelle est la bonne façon de faire un formatage conditionnel dans Django?Django façon de faire un formatage conditionnel
J'ai un modèle qui contient un champ de date, et je voudrais afficher une liste d'enregistrements, mais la couleur des lignes en fonction de la valeur de ce champ de date. Par exemple, les enregistrements qui correspondent à la date du jour que je veux être jaune, les enregistrements qui sont avant aujourd'hui, je veux le vert et les autres après que je veux le rouge.
Quelque part dans Django vous aurez besoin de faire cette comparaison, en comparant la date actuelle à la date de l'enregistrement.
Je peux voir trois endroits différents que la comparaison pourrait être fait:
- Ajouter une méthode pour mon modèle, par exemple, le statut(), qui renvoie soit « passé », « présent », « futur » puis utilisez-le dans le modèle pour colorer les lignes.
- Dans la vue au lieu de retourner un queryset au modèle, prétraiter la liste et comparer chaque enregistrement, construire une nouvelle dict contenant les valeurs « passé », « présent » et « futur » à utiliser dans le modèle
- Créez une nouvelle balise de modèle qui effectue la comparaison.
Laquelle de ces méthodes est la bonne façon de le faire? Il semble que la formation conditionnelle soit quelque chose qui arrive assez souvent, et comme vous ne pouvez pas faire de comparaisons arbitraires dans le modèle, une autre solution est nécessaire. Il en irait de même pour des règles de formatage plus simples, par exemple si je voulais afficher une liste de notes d'étudiants, et je voulais que celles-ci soient vertes à 80% et rouges à 30%.
Une bonne solution, cependant, avec plus d'un modèle, vous devriez copier la méthode du modèle sur tous les autres modèles que vous voulez faire avec cela, ce qui rend cet itinéraire un peu humide. – googletorp
L'héritage du modèle ou une fonction d'utilité réduirait la duplication du code. –
@googletorp: La question n'a pas mentionné plus d'un modèle. La quantité de code requise pour l'attribution des noms de classes est triviale et peut certainement être soit une fonction séparée, soit une fonction réutilisée, soit une partie d'une superclasse. –