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" }}