2012-10-01 11 views
31

Potrzebuję formatować liczby dziesiętne w jinja2.Czy istnieje bezpośrednie podejście do formatowania liczb w jinja2?

Kiedy trzeba formatować dat wzywam metodę strftime() w moim szablonie tak:

{{ somedate.strftime('%Y-%m-%d') }} 

Zastanawiam się, czy istnieje podobne podejście to zrobić w ciągu liczb.

Z góry dzięki!

+3

nie możesz zrobić '{{ "{0: 0.2f}" format (my_num)}.}' Lub '{{my_num | formatu "% 0.2f"}}' (http: // wsgiarea .pocoo.org/jinja/docs/filters.html # format) –

+0

dzięki Joran. Pierwsza sugestia działa dobrze, ale robi to: {{my_num | format "% 0.2f"}} daje wyjątek. – Lucas

+0

@Lucas Przykład z filtrem w komentarzu @ JoranBeasley jest back-to-front; powinno to być ""% 0.2f "| format (my_num) '. Zobacz http://jinja.pocoo.org/docs/dev/templates/#format – Sam

Odpowiedz

42

Można to zrobić po prostu tak, tak Python:

{{ '%04d' % 42 }} 

{{ 'Number: %d' % variable }} 

lub przy użyciu tej metody:

{{ '%d' | format(42) }} 

Osobiście preferuję pierwszy, ponieważ jest to dokładnie tak samo jak w Pythonie.

+0

o tym, że metoda formatu łańcucha jest amortyzowana i należy jej unikać, jeśli to możliwe (domyślam się ... lub coś podobnego ...) –

+1

http : //docs.python.org/release/3.0.1/whatsnew/2.6.html#pep-3101 –

+0

@JoranBeasley w obu przypadkach nie jest przestarzałe w najnowszej wersji 2.7 na GAE, aw ciągu kilku następnych lat nie zobacz wszystkie plany od Google, aby włączyć wersję 3.0. To zajmie trochę czasu :) – Lipis

8

Można użyć runda to niech cię zaokrąglić liczbę do danego precyzja użytkowania jest:

round(value, precision=0, method='common') 

Pierwszy parametr określa precyzję (domyślnie 0), druga metoda zaokrąglania, z którego można wybrać 3:

'common' rounds either up or down 
'ceil' always rounds up 
'floor' always rounds down 
20

Chcę podkreślić komentarz Jøran Beasley, ponieważ uważam, że to najlepsze rozwiązanie:

oryginalny komentarz:

można nie zrobić {{ "{0: 0.2f}". Format (my_num)}} lub {{my_num | format "% 0.2f"}} (wsgiarea.pocoo.org/jinja/docs /filters.html#format) - Joran Beasley 01 października '12 na 21: 07`

Rzeczywiście, prace fantastycznie.

To jest po prostu formatowanie Pythona. Biorąc pod uwagę pierwszy argument, {0}, sformatuj go w następującym formacie: 0.2f.

4

Formatowanie i dopełnianie działają dobrze w ten sam sposób.

{{ "{0}".format(size).rjust(15) }} 
Powiązane problemy