9

Django テンプレートでは常に正の値の変数を使用したいと考えています。変数の符号は単なるテキスト上の意味です:

{% if qty > 0 %}
  Please, sell {{ qty }} products.
{% elif qty < 0 %}
  Please, buy {{ -qty }} products.
{% endif %}

もちろん、{{ -qty }}うまくいきません。

絶対値を含む 2 番目の変数を渡さない回避策はありますか? 値を符号なし整数に変換するテンプレート フィルターのようなもの。

ありがとう!

4

4 に答える 4

13

一部の文字列フィルターを悪用できます。

{% if qty > 0 %}
  Please, sell {{ qty }} products.
{% elif qty < 0 %}
  Please, buy {{ qty|slice:"1:" }} products.
{% endif %}

また

 Please, sell {{ qty|stringformat:"+d"|slice:"1:" }} products.

ただし、おそらくビューで行うか、カスタム フィルターを作成する必要があります。

于 2013-04-02T19:05:12.170 に答える
5

Python のすべてと同様に、そのためのライブラリがあります: django-mathfiltersです。

abs次に、次のようにフィルターを簡単に使用できます。

Please, sell {{ qty|abs }} products.
于 2014-11-10T09:46:54.910 に答える
4

これにはカスタム フィルタを使用する必要があります。

これを行うには、次の 2 つの方法があります。

1)negateフィルターを定義できます。

# negate_filter.py
from django import template
register = template.Library()

@register.filter
def negate(value):
    return -value

次に、テンプレートでコードを先頭に追加し、に{% load negate_filter %}置き換えます。{{ -qty }}{{ qty|negate }}

buy_sell2) 必要に応じて、全体を 1 つのフィルターに置き換えることもできます。

# buy_sell_filter.py
from django import template
register = template.Library()

@register.filter
def buy_sell(value):
    if value > 0 :
      return 'sell %s' % value
    else :
      return 'buy %s' % -value

次に、テンプレートは次のようになります

{% if qty %} Please, sell {{ qty|buy_sell }} products.{% endif %}

文字列全体をフィルターに含めて、テンプレート全体を {{ qty|buy_sell }} にすることもできます。

テンプレートの残りの部分に応じて、どちらのオプションも適切です。たとえば、買いをネガティブに、売りをポジティブに使用する文字列がたくさんある場合は、2 番目の文字列を実行します。

于 2013-04-03T06:39:22.310 に答える
1

ロジックを表示から分離するために、ビューでチェックを実行するのが理想的です (たとえば、qty = 0 の場合はどうなるでしょうか?) テンプレートで数学を行うことを主張する場合は、このハックのようなことを行うことができます。

もう 1 つのオプションは、カスタム フィルターを作成することです (この例を参照してください)。

于 2013-04-02T18:53:35.100 に答える