在 Django 模板中格式化带有小数点和有限小数部分的浮点数

Formatting floats with decimal dots and limited decimal part in Django templates

我知道我可以通过使用过滤器 floatformat:2 来限制浮点数中的小数位数,它输出一个本地化的浮点数,而且我知道过滤器 stringformat:"f" 输出一个带点的浮点数,比如 1.54 而不是像 1,54 这样的本地化逗号浮点数。

例如,如果原始浮点数是 1.54233 我想打印 1.54 而不是 1,54 1.54233。这可以在不需要自定义过滤器的情况下实现吗?

只需使用 localize/unlocalize 格式分隔符

https://docs.djangoproject.com/en/1.9/topics/i18n/formatting/#std:templatefilter-localize

For example:

{% load l10n %}

{{ value|localize }}

To disable localization on a single value, use unlocalize. To control localization over a large section of a template, use the localize template tag. unlocalize¶

Forces a single value to be printed without localization.

For example:

{% load l10n %}

{{ value|unlocalize }}

To force localization of a single value, use localize. To control localization over a large section of a template, use the localize template tag.

编辑:

https://docs.djangoproject.com/en/1.9/topics/i18n/translation/#switching-language-in-templates

{% load i18n %}

{% get_current_language as LANGUAGE_CODE %}
<!-- Current language: {{ LANGUAGE_CODE }} -->
<p>{% trans "Welcome to our page" %}</p>

{% language 'en' %}
    {% get_current_language as LANGUAGE_CODE %}
    <!-- Current language: {{ LANGUAGE_CODE }} -->
    <p>{% trans "Welcome to our page" %}</p>
{% endlanguage %}

如果localize/unlocalize不起作用,您可以切换语言以强制显示

请注意,本地化(因此 unlocalize filter and localize tags) have NO effect on the output of floatformat! At the time of writing there is an open issue about better documentation

虽然将语言切换到 "en" 是一种解决方法,但没有必要实现 (a) 始终使用点和 (b) 限制小数位数,在我看来利用语言功能副作用不太理想。

要使用独立于本地化的 Django 模板过滤器正确格式化浮点数,您 可以 使用 stringformat! Printf-style formatting 不仅接受单个转换(如 "f") ,但有几个可选参数,如 "precision"。有关详细信息,请参阅链接的 Python 文档。

要将浮动 1.54233 格式化为 1.54 只需使用:

{{ float_value|stringformat:".2f" }}