200 votes

Format des numéros dans les modèles de django

Je suis en train de formater les nombres. Exemples :

Il frappe comme un phénomène relativement courant, chose à faire, mais je ne peut pas comprendre quel filtre je suis censé pour utiliser.

Edit : Si vous avez un moyen générique de Python pour ce faire, je suis heureux d’ajouter un champ formaté dans mon modèle.

418voto

Ned Batchelder Points 128913

Demande de Django a contribué à humaniser le fait :

N’oubliez pas d’ajouter à votre dans la liste le `` fichier.

135voto

Vinod Kurup Points 923

S’appuyant sur d’autres réponses, d’étendre cela à flotteurs, vous pouvez faire :

66voto

Dave Aaron Smith Points 2710

Au sujet de la solution de Ned Batchelder, ici, c’est avec 2 décimales et un signe de dollar.

Ensuite, vous pouvez

11voto

muhuk Points 6526

Si vous ne voulez pas participer aux locales ici est une fonction qui met en forme les numéros :

Création d’un filtre de modèle personnalisé par cette fonction est trivial.

11voto

MiniQuark Points 8927

L' humaniser la solution est très bien si votre site web est en anglais. Pour les autres langues, vous avez besoin d'une autre solution: je recommande l'utilisation de Babel. Une solution est de créer un modèle personnalisé balise pour afficher les nombres correctement. Voici comment: il suffit de créer le fichier suivant en your_project/your_app/templatetags/sexify.py:

# -*- coding: utf-8 -*-
from django import template
from django.utils.translation import to_locale, get_language
from babel.numbers import format_number

register = template.Library()

def sexy_number(context, number, locale = None):
    if locale is None:
        locale = to_locale(get_language())
    return format_number(number, locale = locale)

register.simple_tag(takes_context=True)(sexy_number)

Ensuite, vous pouvez utiliser ce modèle de balise dans vos modèles, comme ceci:

{% load sexy_number from sexify %}

{% sexy_number 1234.56 %}
  • Pour un américain de l'utilisateur (la locale en_US) cette affiche 1,234.56.
  • Pour un utilisateur français (locale fr_FR), cette affiche 1 234,56.
  • ...

Bien sûr, vous pouvez utiliser des variables à la place:

{% sexy_number some_variable %}

Remarque: l' context paramètre n'est actuellement pas utilisé dans mon exemple, mais je l'ai mis là pour montrer que vous pouvez facilement modifier ce modèle de la balise à utiliser tout ce qui est dans le modèle de contexte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X