Estou tentando formatar números. Exemplos:
1 => 1
12 => 12
123 => 123
1234 => 1,234
12345 => 12,345
Parece uma coisa bastante comum, mas não consigo descobrir qual filtro devo usar.
Edit: Se você tem uma maneira genérica de Python para fazer isso, fico feliz em adicionar um campo formatado no meu modelo.
Respostas:
O aplicativo humanizado contribuído pelo Django faz isso:
Certifique-se de adicionar
'django.contrib.humanize'
à suaINSTALLED_APPS
lista nosettings.py
arquivo.fonte
Com base em outras respostas, para estender isso aos carros alegóricos, você pode:
Documentação:
floatformat
,intcomma
.fonte
Em relação à solução de Ned Batchelder, aqui estão duas casas decimais e um cifrão. Isso vai a algum lugar como
my_app/templatetags/my_filters.py
Então você pode
fonte
>>> currency(0.99958) u'$0.00'
Tente adicionar a seguinte linha em settings.py:
Isso deve funcionar.
Consulte a documentação .
atualização em 16/04/2018:
Há também uma maneira python de fazer isso:
fonte
Se você não deseja se envolver com as localidades, aqui está uma função que formata números:
Criar um filtro de modelo personalizado a partir desta função é trivial.
fonte
A solução humanizar é boa se o seu site estiver em inglês. Para outros idiomas, você precisa de outra solução: eu recomendo usar o Babel . Uma solução é criar uma tag de modelo personalizada para exibir os números corretamente. Veja como: basta criar o seguinte arquivo em
your_project/your_app/templatetags/sexify.py
:Em seguida, você pode usar essa tag de modelo nos seus modelos assim:
Claro que você pode usar variáveis:
Nota: o
context
parâmetro atualmente não é usado no meu exemplo, mas eu o coloco lá para mostrar que você pode facilmente ajustar essa tag de modelo para usá-la com qualquer coisa que esteja no contexto do modelo.fonte
O aplicativo humanizar oferece uma maneira rápida e agradável de formatar um número, mas se você precisar usar um separador diferente da vírgula, é simples reutilizar o código do aplicativo humanizado , substituir o caractere separador e criar um filtro personalizado . Por exemplo, use o espaço como um separador:
fonte
Um pouco fora do tópico:
Encontrei esta pergunta enquanto procurava uma maneira de formatar um número como moeda, assim:
Acabei fazendo:
Você também pode fazer, por exemplo,
{{ var|stringformat:"1.2f"|cut:"-" }}
exibir como$50.00
(com 2 casas decimais, se é isso que você deseja.Talvez um pouco do lado hacky, mas talvez alguém ache isso útil.
fonte
Bem, eu não consegui encontrar uma maneira do Django, mas encontrei uma maneira python de dentro do meu modelo:
fonte
s really not correct not giving any reason. Here it
é fácil: o Django possui um modelo específico (semelhante ao Jinja2 - ou é o Jinja2), que não permite funções python padrão. Portanto, esta resposta não é de todo útil. O que é funções próprias mais, Django têm obtido gerir este e escrevendo nada de novo que está funcionando realmente não é boa idéia ...Esteja ciente de que a alteração da localidade é de todo o processo e não é segura para threads (ou seja, pode ter efeitos colaterais ou afetar outro código executado no mesmo processo).
Minha proposta: confira o pacote Babel . Alguns meios de integração com modelos do Django estão disponíveis.
fonte
Ainda não sei por que isso não foi mencionado:
https://docs.djangoproject.com/en/1.11/topics/i18n/formatting/#std:templatefilter-localize
Você também pode usar isso no seu código Django (modelos externos) chamando
localize(number)
.fonte
Com base na resposta muhuk, fiz esse
string.format
método simples de encapsular tag python .templatetags
na pasta do aplicativo.format.py
arquivo nele.Adicione isto a ele:
{% load format %}
{{ some_value|format:"{:0.2f}" }}
fonte
No caso de alguém tropeçar nisso,
Django 2.0.2
você pode usar esteMil separador . Leia também a localização do formato .
fonte