2011-06-08 15 views
78

Voglio fare questo:Come si fa la matematica in un modello Django?

100 - {{object.article.rating_score}} 

così per esempio, l'uscita sarebbe "20" se {{}} object.article.rating_score eguagliato "80". Come fare a livello di modello? Non ho accesso al codice Python.

risposta

114

È possibile utilizzare il filtro add:

{{ object.article.rating_score|add:"-100" }} 
+25

Per la moltiplicazione e la divisione è possibile utilizzare in modo improprio il tag di template 'widthratio' incorporato. Per calcolare a * b usa '{% widthratio a 1 b%}', per a/b usa '{% widthratio a b 1%}'. Unico inconveniente, i risultati vengono arrotondati a un intero prima di tornare. [Usando il tag del template widthratio di Django per moltiplicazione e divisione] (http://slacy.com/blog/2010/07/using-djangos-widthratio-template-tag-for-multiplication-division/) – michaell

+7

Usa django-mathfilters. http://pypi.python.org/pypi/django-mathfilters – Erik

+2

@Erik che dovrebbe essere la sua risposta - soluzione molto migliore. – nhinkle

12

In genere è consigliabile eseguire questo calcolo nella visualizzazione. Altrimenti, potresti usare il filtro Aggiungi.

+1

Non consentito non è corretto, tuttavia, nella maggior parte dei casi è consigliabile separare la logica di visualizzazione dalla logica del modello. [Django design philosophies] (https://docs.djangoproject.com/en/dev/misc/design-philosophies/?from=olddocs#separate-logic-from-presentation) –

+0

Come si fa all'interno del ciclo nel modello? – bismigalis

24

Usa django-mathfilters. Oltre al filtro di aggiunta incorporato, fornisce filtri per sottrarre, moltiplicare, dividere e prendere il valore assoluto.

Per l'esempio specifico sopra, si utilizzerà {{ 100|sub:object.article.rating_score }}.

Problemi correlati