Próbuję sformatować liczby. Przykłady:
1 => 1
12 => 12
123 => 123
1234 => 1,234
12345 => 12,345
Wydaje się, że jest to dość powszechna czynność, ale nie mogę dowiedzieć się, którego filtra mam użyć.
Edycja: jeśli masz na to ogólny sposób w Pythonie, z przyjemnością dodam sformatowane pole do mojego modelu.
Odpowiedzi:
Aplikacja humanizująca dostarczona przez Django robi to:
Pamiętaj, aby dodać
'django.contrib.humanize'
do swojejINSTALLED_APPS
listy wsettings.py
pliku.źródło
Opierając się na innych odpowiedziach, aby rozszerzyć to na elementy pływające, możesz:
Dokumentacja:
floatformat
,intcomma
.źródło
Jeśli chodzi o rozwiązanie Neda Batcheldera, tutaj jest ono z dwoma miejscami po przecinku i znakiem dolara. To idzie gdzieś jak
my_app/templatetags/my_filters.py
Wtedy możesz
źródło
>>> currency(0.99958) u'$0.00'
Spróbuj dodać następujący wiersz w settings.py:
To powinno działać.
Zapoznaj się z dokumentacją .
aktualizacja 16.04.2018:
Jest też sposób na zrobienie tego w Pythonie:
źródło
Jeśli nie chcesz angażować się w ustawienia regionalne, oto funkcja formatująca liczby:
Utworzenie niestandardowego filtru szablonu na podstawie tej funkcji jest banalne.
źródło
Rozwiązanie humanizacji jest w porządku, jeśli Twoja witryna jest w języku angielskim. W przypadku innych języków potrzebujesz innego rozwiązania: polecam używanie Babel . Jednym z rozwiązań jest utworzenie niestandardowego tagu szablonu, aby poprawnie wyświetlać liczby. Oto jak: po prostu utwórz następujący plik w
your_project/your_app/templatetags/sexify.py
:Następnie możesz użyć tego tagu szablonu w swoich szablonach w następujący sposób:
Oczywiście możesz zamiast tego użyć zmiennych:
Uwaga:
context
parametr nie jest obecnie stosowany w moim przykładzie, ale umieścić go tam, aby pokazać, że można łatwo dostosować ten szablon tag, aby go używać niczego, co w kontekście szablonu.źródło
Aplikacja humanizująca oferuje przyjemny i szybki sposób formatowania liczby, ale jeśli potrzebujesz użyć separatora innego niż przecinek, możesz po prostu ponownie użyć kodu z aplikacji humanizującej , zastąpić znak separatora i utworzyć niestandardowy filtr . Na przykład użyj spacji jako separatora:
źródło
Nieco poza tematem:
Znalazłem to pytanie, szukając sposobu na sformatowanie liczby jako waluty, na przykład:
Skończyło się na zrobieniu:
Możesz także zrobić, np.
{{ var|stringformat:"1.2f"|cut:"-" }}
Wyświetlić jako$50.00
(z 2 miejscami po przecinku, jeśli tego chcesz.Może trochę po stronie zhackowanej, ale może ktoś inny uzna to za przydatne.
źródło
Cóż, nie mogłem znaleźć drogi Django, ale znalazłem sposób w Pythonie z wnętrza mojego modelu:
źródło
s really not correct not giving any reason. Here it
proste: Django ma specjalny szablon (podobny do Jinja2 - lub Jinja2), który nie pozwala na standardowe funkcje Pythona. Więc ta odpowiedź nie jest w ogóle przydatna. Co więcej, Django ma własne funkcje, które tym zarządzają, a pisanie czegoś nowego to, co działa, to naprawdę zły pomysł ...Należy pamiętać, że zmiana ustawień regionalnych dotyczy całego procesu i nie jest bezpieczna dla wątków (może mieć skutki uboczne lub może wpływać na inny kod wykonywany w ramach tego samego procesu).
Moja propozycja: sprawdź pakiet Babel . Dostępne są sposoby integracji z szablonami Django.
źródło
Nie wiem, dlaczego jeszcze o tym nie wspomniano:
https://docs.djangoproject.com/en/1.11/topics/i18n/formatting/#std:templatefilter-localize
Możesz również użyć tego w swoim kodzie Django (poza szablonami), wywołując
localize(number)
.źródło
Opierając się na odpowiedzi muhuk, zrobiłem tę prostą
string.format
metodę hermetyzacji znaczników w Pythonie .templatetags
w folderze aplikacji.format.py
na nim plik.Dodaj do tego:
{% load format %}
{{ some_value|format:"{:0.2f}" }}
źródło
Na wypadek, gdyby ktoś się na to natknął,
Django 2.0.2
możesz tego użyćSeparator tysięcy . Koniecznie przeczytaj również lokalizację formatu .
źródło