Login

Pad integers with leading zeros (template filter)

Author:
jcroft
Posted:
January 11, 2008
Language:
Python
Version:
.96
Score:
-2 (after 2 ratings)

Disclaimer: I'm not the world's greatest programmer, so there may be better ways to do this, but it works for me (feel free to offer your improvements, though!).

Basically, this will pad an integer with leading zeros and return a string representation. User it like this:

{% forloop.counter|leading_zeros:"5" %}

...where "5" is the number of desired digits. In this case, if it was the 12th time through the forloop, the filter would return "00012".

Why do this? Either for alignment, such as in tables, or for aesthetics -- for an example, see Shaun Inman's comment section.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
@register.filter
def leading_zeros(value, desired_digits):
  """
  Given an integer, returns a string representation, padded with [desired_digits] zeros.
  """
  num_zeros = int(desired_digits) - len(str(value))
  padded_value = []
  while num_zeros >= 1:
    padded_value.append("0") 
    num_zeros = num_zeros - 1
  padded_value.append(str(value))
  return "".join(padded_value)

More like this

  1. Template tag - list punctuation for a list of items by shapiromatron 10 months, 2 weeks ago
  2. JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 10 months, 3 weeks ago
  3. Serializer factory with Django Rest Framework by julio 1 year, 5 months ago
  4. Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 6 months ago
  5. Help text hyperlinks by sa2812 1 year, 6 months ago

Comments

kioopi (on January 11, 2008):

hey, doesn't

def leading_zeros(value, desired_digits):
    return str(value).zfill(desired_digits)

do the same thing?

#

jcroft (on January 11, 2008):

Probably. And I've also been informed that you can use the string formatting built-in template tag to accomplish this:

{{ var_containing_number|stringformat:"05d" }}

So, yeah -- good idea, but maybe not the best way to do it. I sort of suspected there was probably a better way. :)

#

laffuste (on March 5, 2013):

Or, without template tags:

padded_value = "%05d" % value

(for a 5 digit padded number)

#

jnns (on February 28, 2014):

Well, thanks anyway jcroft! I was looking for zero-padding for Django templates and now I know about at least two simple solutions.

#

Please login first before commenting.