私は、異なる通貨での価格を取得し、ブラジルのRは$ 私の書式設定が動作しません表示すると、表示は次のようになりますよ:表示価格
価格:1.15..000、00 R $
私は文字列として価格を保存した良好な柔軟性のために:私は私自身のフィルタを実装しようとしましたが、それは動作しませんでしたprice=db.StringProperty(verbose_name="price")
: {{ ad.price|separate }} R$
def separate(n, sep='.'):
ln = list(str(n))
ln.reverse()
newn = []
while len(ln) > 3:
newn.extend(ln[:3])
newn.append(sep)
ln = ln[3:]
newn.extend(ln)
newn.reverse()
return "".join(newn)
私を助けることができますか?フィルタを削除するだけですか?代わりに入力に正規表現を適用する必要がありますか?自分のサイトへのリンクはhttp://www.koolbusiness.com/servead/4252196
UPDATEです:私は、これらのフィルタのいずれかのようなものを使用して検討している:
import locale
locale.setlocale(locale.LC_ALL, '')
def currency(value): # doesn't work
locale.setlocale(locale.LC_ALL, '')
return locale.currency(value, grouping=True)
register.filter(currency)
def currencyWithoutUsingLocale(value): # needs adjustment
value=float(value)
symbol = '$'
thousand_sep = ''
decimal_sep = ''
# try to use settings if set
try:
symbol = settings.CURRENCY_SYMBOL
except AttributeError:
pass
try:
thousand_sep = settings.THOUSAND_SEPARATOR
decimal_sep = settings.DECIMAL_SEPARATOR
except AttributeError:
thousand_sep = ','
decimal_sep = '.'
intstr = str(int(value))
f = lambda x, n, acc=[]: f(x[:-n], n, [(x[-n:])]+acc) if x else acc
intpart = thousand_sep.join(f(intstr, 3))
return "%s%s%s%s" % (symbol, intpart, decimal_sep, ("%0.2f" % value)[-2:])
register.filter(currencyWithoutUsingLocale)
「うまくいきませんでした」というのはあまり役に立ちません。あなたが試したときに何が起こったのですか? –
1オンスあたりの販売はストリングとしてリストされていますが、私は認めなければならない他の組み合わせがあるかもしれません。私は誰かが売るなど不可能にならないような正規表現やルールを考えるのに失敗します。 1オンスあたりの金属 –