1

したがって、3つの異なる値にすることができるdecimalfieldがあります。私の見解では、適切な10進値をキーとして含む値のディクショナリを渡します。

{% for item in booklist %}  
    {% for key, value in numvec.items %}  
        {{item.number}}  
        {% ifequals item.number {{key}} %}  
            {{value}}  
        {% endifequals %}  
    {% endfor %}
{% endfor %}

これは私がnumvecとして渡すdictです:

numvec = {"TEST":Decimal("0.999"), "TEST2":Decimal("0.500"),

"TEST3":Decimal( "0.255")}

数値フィールドは、私のモデルで次の選択肢があると定義されました。

BOOK_CHOICES=((Decimal("0.999"), 'TEST'),(Decimal("0.500"), 'TEST2'),(Decimal("0.255"), 'TEST3'),)

dictを属性と比較すると、アイテム番号がビューに正しく出力されますが、何らかの理由で、ifequalsは2つの小数を適切に比較できません。これはバグですか、それともテンプレートでifequalsを使用して何か間違ったことをしていますか?

4

6 に答える 6

11

これはバグではなく、あなたがやろうとしていることを達成することは可能です。

ただし、まず最初に、コードに関するいくつかの注意事項を示します。

  • 「ifequals/endifequals」演算子はありません。「ifequal/endifequal」または「if/endif」のいずれかを使用します。
  • 第二に。{% ifequal item.number {{key}} %}「ifequal」または「if」演算子内に二重中括弧を残すと、コードによってTemplateSyntaxError例外が発生します。

今の解決策

  1. 「stringformat」フィルターを使用して、10進値を文字列に変換するだけです。
  2. 演算子内で変数を使用する場合は、中括弧をスキップしてください。
  3. 「if」または「ifequal」演算子内の変数は常に文字列として表されることを忘れないでください。

次にを示します。

{% for item in decimals %}  
  {% if item|stringformat:"s" == variable %}  
    {{ variable }}
  {% endif %}  
{% endfor %}
于 2010-04-15T10:25:19.493 に答える
2

ソリューション:

{% for item in decimals %}  
  {% if item|stringformat:"s" == variable %}  
    {{ variable }}
  {% endif %}  
{% endfor %}

小数(ループなど)を文字列(渡された値など)と比較する場合に適しています

于 2010-07-29T08:21:57.383 に答える
2

thisによると、文字列しか比較できないようです。私があなただったら、自分のテンプレート タグを作成します。

于 2009-01-14T18:30:24.383 に答える
0

最も簡単な解決策は、数値ロジックをカプセル化し、人間にわかりやすい文字列を返すメソッドをモデルに定義することです。

または、テンプレートタグを記述してそれを行うこともできます。これは、はるかに多くのコードですが、モデル/ビューレイヤーの分離を少し良く維持する可能性があります。

于 2009-01-15T19:30:01.003 に答える
0

これが Ardesco に役立つかどうかは明確ではありませんが、 、 、 、 タグ (とりわけ) を持つ template_utils があり、プレーンでは不十分な非常に関連するケースを解決しますif_greaterif_greater_or_equalif_lessif_less_or_equalifequals

インストール後、template_utilsdo your django settings.py を下に追加してから、テンプレートINSTALLED_APPSに入れます{% load comparison %}

于 2009-06-16T04:05:00.983 に答える
0

対照的に、1.1 や 2.2 のような数値は、2 進浮動小数点では正確に表現されません。>>

たとえば、

print Decimal(3.59)

あなたが得る

3.589999999999999857891452847979962825775146484375

したがって、django テンプレートで 2 つの小数を比較する場合は、@Oleg Sakharov の回答を使用するか、同じ方法で次のような異なる書式設定文字列を使用することをお勧めします。

if item|stringformat:".2f" == "3.59"
于 2014-11-05T23:05:36.160 に答える