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

时间:2015-12-11 20:00:46

标签: python django python-3.x django-templates django-1.8

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

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

2 个答案:

答案 0 :(得分:8)

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

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

  

例如:

     

{% load l10n %}

     

{{ value|localize }}

     

要禁用单个值的本地化,请使用unlocalize。控制   在模板的大部分上进行本地化,使用localize   模板标签。 unlocalize¶

     

强制打印单个值而不进行本地化。

     

例如:

     

{% load l10n %}

     

{{ value|unlocalize }}

     

要强制单个值的本地化,请使用localize。控制   在模板的大部分上进行本地化,使用localize   模板标签。

编辑:

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不起作用,您可以切换语言强制显示

答案 1 :(得分:2)

请注意,本地化(以及unlocalize filter and localize tags)对floatformat的输出具有 NO 效果!在撰写本文时,有一个open issue about better documentation

虽然将语言切换为“ en”是一种解决方法,但不必实现(a)始终使用点和(b)限制小数位数,并且我认为这是利用语言功能的副作用不够理想。

要使用与本地化无关的Django模板过滤器正确格式化浮点格式,您可以 使用stringformatPrintf-style formatting不仅接受一次转换(如"f"),还接受多个可选参数,例如“ precision”。有关详细信息,请参见链接的Python文档。

要将浮点数 1.54233 设置为 1.54 ,只需使用:

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