Formatting floats with decimal dots and limited decimal part in Django templates
just use the localize/unlocalize format separator
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.
edit:
see 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 %}
you can switch languages to force the display if localize/unlocalize does not work
Note, that localization (and therefore the 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.
While switching the language to "en" is a workaround, it is not necessary to achieve (a) always using a dot and (b) limiting the number of decimals and in my opinion taking advantage of a language feature side-effect is less than ideal.
To properly format a float with Django template filters independent of localization you can use stringformat
! Printf-style formatting does not only accept a single conversion (like "f"
), but several optional parameters like "precision". See the linked Python docs for details.
To format your float 1.54233 as 1.54 simply use:
{{ float_value|stringformat:".2f" }}