Django - čitatelnejšie zobrazovanie čísiel

Určite ste sa s týmto problémom už niekedy stretli. Vidíte napríklad číslo 87676254, na prvý pohľad neviete odhadnuť koľko je tam číslic a či je to rádovo milión alebo miliarda. Riešenie je pritom celkom jednoduché, stačí číslice oddelit po tisícoch medzerou a číslo 87 676 254 je hneď čitatelnejšie. Asi Vás veľmi neprekvapí že Django už obsahuje funkciu intcomma ktorá slúži na čitateľné formátovanie čísiel. Dokonca vie čísla formátovať pre rôzne krajiny (lokalizovane), keďže niektoré krajiny zobrazujú čísla v inom formáte.

Ak chcete formátovanie číslic použiť v šablonách treba postupovať nasledovne, do súboru settings.py treba pridať tento riadok:

INSTALLED_APPS = [  
...
'django.contrib.humanize'  
]

Na začiatku šablóny treba načítať modul humanize:

{% load humanize %}

a potom už sa čísla dajú formátovať pomocou parametra intcomma:

{{ value|intcomma }}

Čísla môžete formátovať aj priamo z kódu, ukážka formátovania číslic pre rôzne krajiny:

In [1]: from django.contrib.humanize.templatetags import humanize  
In [2]: from django.utils.translation import activate

In [3]: activate('en-us')  
In [4]: print(humanize.intcomma('1000000'))  
1,000,000

In [5]: activate('de-de')  
In [6]: print(humanize.intcomma('1000000'))  
1.000.000

In [7]: activate('sk-sk')  
In [8]: print(humanize.intcomma('1000000'))  
1 000 000  

Oddelovanie číslic po tisícoch sa dá nastaviť aj globálne pre všetky šablóny. Ale to asi nie je celkom dobrý nápad, lebo ak budete chcieť pracovať s číslami napríklad z JavaScriptu môžete sa dostať do problémov.

# globalne formatovanie cisiel, subor settings.py

USE_L10N = True  
USE_THOUSAND_SEPARATOR = True  

Pomocou Djanga vieme problém "čitateľnejších čísiel" riešiť jednoducho a elegantne. Problém však nastáva ak potrebujeme číslo rovnako ako v Djangu formátovať napríklad v JavaScript-ovom frontende. Ale to už je iný príbeh :)

Show Comments