2017-10-25 1 views
0

{% if %}部分では、文字列形式の数値と別の数値を比較したいと思います。私はsliceフィルタを試しましたが、うまくいきません。 テンプレートに渡されるすべての数字がdjangoの文字列として解釈され、文字列をテンプレートの数値に変換する方法がないため、文字列を比較する必要があります。Django - データ型に応じたテンプレートのif条件の比較

私はパーティション情報を取得し、<table>のテンプレートに送信しています。パーティションの使用率が90%を超える場合、パーセンテージは赤で表示されます。

マシンに複数のパーティションが存在するため、条件付きスタイルの行は独立しているため、表示時ではなく、表示時に決定する方が適しています。

パーセントは整数(89)で、小数点ではありません(0.7)。小数点の場合は{% if '0.9' in value %}を使用できますが、そうではありません。

私はこのように私のテンプレートがあります(part.4からpart.0は、パーティションに関する他のデータです)

<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 ----------------------------

partsdiskpart.devicesdiskpart,mountpointを付加、psutil.disk_partitions('some_partition')psutil.disk_usage("some_mountpoint")から得られたデータとのリストであります、sdickusage.total,sdiskusage.free,sdiskusage.free,sdiskusage.percent。それは次のようである:

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

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

これでデータは条件に一致しても不平は表示されませんが、赤色にはなりません。

私の目標を達成するためには何ができますか?

PS:ドキュメントで

、私はこのfraseを参照してください:あなたはまた、if式でフィルタを使用することができます

フィルタ。たとえば、次のように

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

しかし、それは受け入れられ、他のフィルタを言及していません。だから、sliceなどのフィルタは許可されていますか?そうではないようです。

私はテンプレートでフィルタを使用することに関して他の投稿を見ましたが、ifで使用することは言及されていませんが、{{ str.slice }}のようになります。

+0

スライスは、Pythonと同じに動作します。 '0:1'のスライスはリストを与え、それは決して整数に等しいことはありません。 –

+0

しかし、それはリストを与える?私は疑問に思います.... >>> '18 .9' [0:1] '1' '。 – FaithReaper

+0

私は、文字列をスライスしたいと思っています。 – FaithReaper

答えて

0

まあ、私は答えを見つけました。

(float) '90.7'をリストに渡すと、Djangoテンプレートで90と比較できます。素晴らしい。私はそれを文字列として渡す前に。

ので、リストには次のようにする必要があります:

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

そして、このような比較は、テンプレートに立つ:テンプレートで

{% if part.5 > 90.0 %} 
... 
{% endif %} 
関連する問題