From: Matthijs Kooijman Date: Fri, 16 Jan 2009 21:18:52 +0000 (+0100) Subject: Add natural_list template filter. X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fprojects%2Fxerxes.git;a=commitdiff_plain;h=236fd15bbbae94b7a76473ba3f93e2f0e94d28d6 Add natural_list template filter. This template filter transforms lists like ['foo', 'bar', 'baz'] into a natural list like 'foo, bar and baz'. --- diff --git a/tools/templatetags/list.py b/tools/templatetags/list.py index e0111b0..70ce860 100644 --- a/tools/templatetags/list.py +++ b/tools/templatetags/list.py @@ -1,6 +1,8 @@ from django import template from django.template.defaultfilters import unordered_list from django.utils.safestring import mark_safe +from django.utils.encoding import force_unicode +from django.utils.translation import ugettext as _ """ Template tags and filters for working with lists. @@ -26,3 +28,27 @@ def list_or_value(list, autoescape=None): else: return mark_safe('') list_or_value.needs_autoescape = True + +@register.filter(name='natural_list') +def natural_list(list): + """ + Turns the list into a natural list, using comma's and "and" for + joining the terms. The result is somewhat localized (but probably + insufficient for language that use completely different + interpunction for lists). + """ + if len(list) == 0: + return '' + res = '' + for item in list[0:-1]: + if res: + res += ', ' + res += item.__unicode__() + + if res: + res += ' %s ' % _('and') + + res += list[-1].__unicode__() + + return res +natural_list.is_safe = True