0

Djangoテンプレート言語には非常に多くの機能があります: https ://docs.djangoproject.com/en/dev/ref/templates/builtins/?from = olddocs

しかし、私はそれを見つけるのに苦労しています。HTMLドキュメントに送信されるPythonの辞書があります。

辞書:hello = {'a':100, 'b':200, 'c':300, etc:etc}

HTMLファイルでこれを行うと{{a}}、数値100が出力されます。

今、私は、Djangoテンプレートを使用して100および他のすべての値の文字を追加することが可能かどうか疑問に思いました。したがって、出力を100200300などから10a020a030a0などまたは1.002.003.00などに変更するフィルターのように。私が見つけた最も近いものは、組み込み機能の追加である{{ value|add:"2" }}ため、 6{{ 4|add:"2" }}が得られます。

これを読んでくれてありがとう、私はどんな助けにも感謝します!

4

3 に答える 3

2

テンプレートでこれを本当に実行したい場合は、次のことを試すことができます。

 {% for d in a|make_list %}{{d}}{%if forloop.counter == 1 %}.{%endif%}{%endfor%}

しかし、これは醜いです!

値を適切に変換するための単純なテンプレートフィルターを作成することをお勧めします。

例えば:

# sample filter
def todollars(value):
    val = int(value)
    return "%.2f" % val/100.0

テンプレートでは、次のように使用します。

{{ a|todollars }}

これにより、値がの場合と同じよう1.00に値が得られます100

テンプレートフィルターの作成方法の詳細については、こちらをご覧ください。

于 2012-11-30T08:32:51.133 に答える
2

問題は、私が小さなウェブストアを作っているということです。したがって、すべての値はセントで表す必要があります(サーバーなどで)。しかし、顧客にとっては、ドルで表示する方が簡単です。

次に、最良の妥協案はフィルターを作成することだと思います。

from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter
@stringfilter
def dollars(value):
    strng = "%d" % value
    return strng[:-2]+'.'+strng[-2:]

テンプレートでは、次のように指定できます

{{ a|dollars }}
于 2012-11-30T08:35:39.363 に答える
1

上記のコメントで述べたように、ビューまたはモデルでこれを行うことを実際に検討する必要があります(これが私の好みです)。

例えば:

あなたのモデルで

import locale
locale.setlocale(locale.LC_ALL, '')

class Product(models.Model):
    ...
    price = models.IntegerField(...)   # hundredths of a unit
    ...

    def human_price(self):
        return locale.currency(self.price / 100, grouping=True)

テンプレート内:

{{ object.human_price }}

製品の価格が1123.14159の場合、出力は£1,123.14になります(私のロケールは「en_GB.UTF-8」であるため、これはGBPで表示され、異なる場合があります。

全体だけが必要な場合は、次を使用できます。

locale.format('%0.0f', self.price / 100, grouping=True)

代わりに、この例では1,123が返されます。

ロケールの詳細については、http://docs.python.org/2/library/locale.htmlをご覧ください。

于 2012-11-30T08:27:11.033 に答える