Estoy tratando de formatear números. Ejemplos:
1 => 1
12 => 12
123 => 123
1234 => 1,234
12345 => 12,345
Parece algo bastante común, pero no puedo entender qué filtro se supone que debo usar.
Editar: si tiene una forma genérica de Python para hacer esto, me complace agregar un campo formateado en mi modelo.
Respuestas:
La aplicación de humanización contribuida de Django hace esto:
Asegúrese de agregar
'django.contrib.humanize'
a suINSTALLED_APPS
lista en elsettings.py
archivo.fuente
Sobre la base de otras respuestas, para extender esto a las carrozas, puede hacer:
Documentación:
floatformat
,intcomma
.fuente
Con respecto a la solución de Ned Batchelder, aquí está con 2 puntos decimales y un signo de dólar. Esto va a algún lado como
my_app/templatetags/my_filters.py
Entonces tú puedes
fuente
>>> currency(0.99958) u'$0.00'
Intente agregar la siguiente línea en settings.py:
Esto debería funcionar.
Consulte la documentación .
actualización en 2018-04-16:
También hay una forma de Python para hacer esto:
fuente
Si no desea involucrarse con las configuraciones regionales, aquí hay una función que formatea los números:
Crear un filtro de plantilla personalizado a partir de esta función es trivial.
fuente
La solución humanize está bien si su sitio web está en inglés. Para otros idiomas, necesita otra solución: recomiendo usar Babel . Una solución es crear una etiqueta de plantilla personalizada para mostrar los números correctamente. Así es como: simplemente cree el siguiente archivo en
your_project/your_app/templatetags/sexify.py
:Luego puede usar esta etiqueta de plantilla en sus plantillas de esta manera:
Por supuesto, puede usar variables en su lugar:
Nota: el
context
parámetro no se usa actualmente en mi ejemplo, pero lo puse allí para mostrar que puede ajustar fácilmente esta etiqueta de plantilla para que use cualquier cosa que esté en el contexto de la plantilla.fuente
La aplicación humanize ofrece una forma agradable y rápida de formatear un número, pero si necesita usar un separador diferente de la coma, es simple reutilizar el código de la aplicación humanize , reemplazar el separador char y crear un filtro personalizado . Por ejemplo, use el espacio como separador:
fuente
Ligeramente fuera de tema:
Encontré esta pregunta mientras buscaba una forma de formatear un número como moneda, así:
Terminé haciendo:
También podría hacerlo, por ejemplo,
{{ var|stringformat:"1.2f"|cut:"-" }}
para mostrar como$50.00
(con 2 decimales si eso es lo que desea).Quizás un poco hacky, pero quizás alguien más lo encuentre útil.
fuente
Bueno, no pude encontrar una forma de Django, pero sí encontré una forma de Python desde el interior de mi modelo:
fuente
s really not correct not giving any reason. Here it
es fácil: Django tiene una plantilla específica (similar a Jinja2, o es Jinja2) que no permite las funciones estándar de Python. Entonces esta respuesta no es útil en absoluto. Lo que es más funciones propias, Django ha conseguido la gestión de este y escribiendo nada nuevo lo que está funcionando realmente no es buena idea ...Tenga en cuenta que cambiar la configuración regional es para todo el proceso y no es seguro para subprocesos (por ejemplo, puede tener efectos secundarios o puede afectar a otro código ejecutado dentro del mismo proceso).
Mi propuesta: mira el paquete de Babel . Existen algunos medios para integrarse con las plantillas de Django.
fuente
Aún no estoy seguro de por qué esto no se ha mencionado:
https://docs.djangoproject.com/en/1.11/topics/i18n/formatting/#std:templatefilter-localize
También puede usar esto en su código de Django (plantillas externas) llamando
localize(number)
.fuente
Basado en la respuesta muhuk, hice este
string.format
método simple de encapsulación de python .templatetags
carpeta de aplicaciones en su.format.py
archivo en él.Agregue esto:
{% load format %}
{{ some_value|format:"{:0.2f}" }}
fuente
En caso de que alguien se tope con esto,
Django 2.0.2
puede usar estoMil separadores . Asegúrese de leer también la localización de formatos .
fuente