This is to be used as a template filter. See django documentation for adding custom filters.
Example of use:
name = "bart simpson"
{{ name|cap }}
will convert 'name' to "Bart Simpson"
It works on space-separated names, as well as the following:
- converts "mcfly" to "McFly";
- converts "o'neill" to "O'Neill";
- converts "barker-bradley" to "Barker-Bradley"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | @register.filter
def cap(value):
namelist = value.split(' ')
fixed = ''
for name in namelist:
name = name.lower()
# fixes mcdunnough
if name.startswith('mc'):
sub = name.split('mc')
name = "Mc" + sub[1].capitalize()
# fixes "o'neill"
elif name.startswith('o\''):
sub = name.split('o\'')
name = "O'" + sub[1].capitalize()
else: name = name.capitalize()
nlist = name.split('-')
for n in nlist:
if len(n) > 1:
up = n[0].upper()
old = "-%s" % (n[0],)
new = "-%s" % (up,)
name = name.replace(old,new)
fixed = fixed + " " + name
return fixed
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 10 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 10 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 5 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 6 months ago
- Help text hyperlinks by sa2812 1 year, 6 months ago
Comments
Thanks, this is much more useful than Pythons own capitalization methods!
#
Please login first before commenting.