在 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" }}
我知道我可以通过使用过滤器 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" }}