J'essaye de formater les nombres. Exemples:
1 => 1
12 => 12
123 => 123
1234 => 1,234
12345 => 12,345
Cela semble être une chose assez courante à faire, mais je ne sais pas quel filtre je suis censé utiliser.
Edit: Si vous avez une façon générique de faire cela en Python, je suis heureux d'ajouter un champ formaté dans mon modèle.
Réponses:
L' application humanize fournie par Django fait ceci:
Assurez-vous d'ajouter
'django.contrib.humanize'
à votreINSTALLED_APPS
liste dans lesettings.py
fichier.la source
En vous basant sur d'autres réponses, pour étendre cela aux flotteurs, vous pouvez faire:
Documentation:
floatformat
,intcomma
.la source
Concernant la solution de Ned Batchelder, la voici avec 2 décimales et un signe dollar. Cela va quelque part comme
my_app/templatetags/my_filters.py
Ensuite vous pouvez
la source
>>> currency(0.99958) u'$0.00'
Essayez d'ajouter la ligne suivante dans settings.py:
Cela devrait fonctionner.
Reportez-vous à la documentation .
mise à jour le 16/04/2018:
Il existe également un moyen python de faire cette chose:
la source
Si vous ne voulez pas vous impliquer dans les paramètres régionaux, voici une fonction qui formate les nombres:
La création d'un filtre de modèle personnalisé à partir de cette fonction est triviale.
la source
La solution humanize convient si votre site Web est en anglais. Pour les autres langues, vous avez besoin d'une autre solution: je recommande d'utiliser Babel . Une solution consiste à créer une balise de modèle personnalisée pour afficher correctement les nombres. Voici comment: créez simplement le fichier suivant dans
your_project/your_app/templatetags/sexify.py
:Ensuite, vous pouvez utiliser cette balise de modèle dans vos modèles comme ceci:
Bien sûr, vous pouvez utiliser des variables à la place:
Remarque: le
context
paramètre n'est actuellement pas utilisé dans mon exemple, mais je l'ai mis là pour montrer que vous pouvez facilement modifier cette balise de modèle pour qu'elle utilise tout ce qui se trouve dans le contexte du modèle.la source
L' application humanize offre un moyen agréable et rapide de formater un nombre, mais si vous devez utiliser un séparateur différent de la virgule, il est simple de réutiliser simplement le code de l'application humanize , de remplacer le caractère de séparation et de créer un filtre personnalisé . Par exemple, utilisez l' espace comme séparateur:
la source
Légèrement hors sujet:
J'ai trouvé cette question en cherchant un moyen de formater un nombre en tant que devise, comme ceci:
J'ai fini par faire:
Vous pouvez également faire, par exemple
{{ var|stringformat:"1.2f"|cut:"-" }}
pour afficher comme$50.00
(avec 2 décimales si c'est ce que vous voulez.Peut-être légèrement sur le côté hacky, mais peut-être que quelqu'un d'autre le trouvera utile.
la source
Eh bien, je n'ai pas pu trouver un moyen Django, mais j'ai trouvé un moyen python à l'intérieur de mon modèle:
la source
s really not correct not giving any reason. Here it
facile: Django a un template spécifique (similaire à Jinja2 - ou c'est Jinja2) qui n'autorise pas les fonctions python standard. Cette réponse n'est donc pas du tout utile. De plus, Django a ses propres fonctions pour gérer cela et écrire quoi que ce soit de nouveau ce qui fonctionne n'est vraiment pas une bonne idée ...Sachez que le changement de paramètres régionaux concerne l'ensemble du processus et n'est pas sûr pour les threads (iow., Peut avoir des effets secondaires ou affecter un autre code exécuté dans le même processus).
Ma proposition: découvrez le package Babel . Certains moyens d'intégration avec les modèles Django sont disponibles.
la source
Je ne sais pas pourquoi cela n'a pas encore été mentionné:
https://docs.djangoproject.com/en/1.11/topics/i18n/formatting/#std:templatefilter-localize
Vous pouvez également l'utiliser dans votre code Django (hors modèles) en appelant
localize(number)
.la source
Sur la base de la réponse de muhuk, j'ai fait cette simple balise encapsulant la
string.format
méthode python .templatetags
dossier d'application de votre.format.py
fichier dessus.Ajoutez-y ceci:
{% load format %}
{{ some_value|format:"{:0.2f}" }}
la source
Au cas où quelqu'un trébucherait dessus,
Django 2.0.2
vous pouvez utiliserMille séparateur . Assurez-vous de lire également la localisation du format .
la source