-
-
Save dnmellen/bfc1b3005999aaff3ed4 to your computer and use it in GitHub Desktop.
from django import template | |
register = template.Library() | |
@register.filter | |
def cool_number(value, num_decimals=2): | |
""" | |
Django template filter to convert regular numbers to a | |
cool format (ie: 2K, 434.4K, 33M...) | |
:param value: number | |
:param num_decimals: Number of decimal digits | |
""" | |
int_value = int(value) | |
formatted_number = '{{:.{}f}}'.format(num_decimals) | |
if int_value < 1000: | |
return str(int_value) | |
elif int_value < 1000000: | |
return formatted_number.format(int_value/1000.0).rstrip('0').rstrip('.') + 'K' | |
else: | |
return formatted_number.format(int_value/1000000.0).rstrip('0').rstrip('.') + 'M' |
This is great - thank you! One small note is that it doesn't work for numbers like 40000 because the rstrip('0.')
strips all the combinations of the passed in char string so it would result in 40.0
being stripped down to 4
and output 4k
when it should be 40k
A workaround I found was to replace rstrip('0.')
with rstrip('0').rstrip('.')
which will remove all trailing zeros and then any trailing decimals.
@dnmellen Thank you for this awesome piece!
@danielafcarey Thank you for the correction, it was really helpful!
Please how do I use it in my template? Thanks
@danielafcarey Thanks for your correction!
@dantechplc Checkout Django's docs about custom filters (https://docs.djangoproject.com/en/3.2/howto/custom-template-tags/). You need to add this file inside templatetags
folder within your django app directory as it says in the docs. After that you can load that custom filter in your template and use it:
{% load numbers %}
...
{{ yourvar|cool_number }}
Thank