2017-10-25 3 views
0

Im {% if %} Teil möchte ich eine Zahl in String-Form mit einer anderen vergleichen. Ich habe versucht, slice Filter, aber es funktioniert nicht. Ich muss eine Zeichenkette vergleichen, weil ich denke alle an die Vorlage übergebenen Zahlen werden als Zeichenfolge in django interpretiert, und keine Möglichkeit, Zeichenfolge in Nummer in Vorlage zu konvertieren.Django - Vergleich in if-Bedingung in Vorlage nach Art der Daten

Ich bekomme die Partition Informationen und senden Sie es an die Vorlage, in einer <table>. Wenn der verwendete Prozentsatz einer Partition über 90% liegt, sollte der Prozentsatz rot sein.

Da es mehr als eine Partition in der Maschine gibt, ist der bedingte Stil der Zeilen unabhängig, daher ist es besser, beim Rendern zu entscheiden, nicht in der Ansicht.

Der Prozentsatz kommt als Integer (89), nicht in Dezimal (0.7). Wenn es dezimal ist, kann ich {% if '0.9' in value %} verwenden, aber das ist nicht der Fall.

Ich habe meine Vorlage wie folgt aus: (part.0-part.4 sind andere Daten über Partitionen)

<tbody> 
    {% for part in partitions %} 
    <tr> 
     <td>{{part.0}}</td> <td>{{part.1}}</td> <td>{{part.2}} GB </td> <td>{{part.3}} GB </td> <td>{{part.4}} GB </td> 
     {% if part.5|slice:"0:1" == "8" or part.5|slice:"0:1" == "9" %} 
     <td><font color="red">{{part.5}}%</font></td> 
     {% else %} 
     <td>{{part.5}}%</td> 
     {% endif %} 
    </tr> 
    {% endfor %} 
</tbody> 

---------------------- EDIT 1 ----------------------------

part ist eine Liste mit Daten, erhalten von psutil.disk_partitions('some_partition') und psutil.disk_usage("some_mountpoint"), Anfügen sdiskpart.device, sdiskpart,mountpoint , sdickusage.total, sdiskusage.free, sdiskusage.free, sdiskusage.percent. Es ist wie:

['/dev/sda1', '/boot', 'xxxxxxxxx', 'xxxxxxxxx', 'xxxxxxx', '20.9'] 

---------------------- EDIT 1 --------------- -------------

Nun, es beschwert sich nicht, aber wird nicht rot weder, wenn die Daten den Zustand entsprechen.

Was kann ich tun, um mein Ziel zu erreichen?

PS:

In der Dokumentation, sehe ich diese frase:

Filter Sie auch Filter in dem, wenn Ausdruck verwenden können. Zum Beispiel:

{% if messages|length >= 100 %} 
    You have lots of messages today! 
{% endif %} 

aber erwähnt es keine anderen Filter, die akzeptiert werden. Sind also Filter wie slice oder andere Dinge erlaubt? Es scheint nicht.

Ich habe andere Beiträge über die Verwendung von Filtern in der Vorlage gesehen, aber sie erwähnen nicht die Verwendung in if, aber sind wie {{ str.slice }}.

+0

Slicing in Vorlagen die gleiche wie in Python arbeitet; Eine Scheibe von '0: 1' gibt eine Liste, sie kann niemals einer Ganzzahl gleich sein. –

+0

Aber es gibt eine Liste? Ich bezweifle ... '>>> '18 .9 '[0: 1]' 1''. – FaithReaper

+0

Ich meine, ich möchte eine Zeichenfolge in Scheiben schneiden. – FaithReaper

Antwort

0

Nun, ich fand die Antwort.

Wenn ich (float) '90.7' in die Liste übergebe, kann Django Vorlage es mit 90 vergleichen. Tolle. Bevor ich es als String übergeben habe.

So sollte die Liste wie:

['/dev/sda1', '/boot', 'xxxxxxxxx', 'xxxxxxxxx', 'xxxxxxx', 20.9] 
# last element is a float 

Und ein solcher Vergleich in der Vorlage steht:

{% if part.5 > 90.0 %} 
... 
{% endif %}