X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fprojects%2Fxerxes.git;a=blobdiff_plain;f=tools%2Ftemplatetags%2Flist.py;h=70ce860d978a0d03c83775ac5c4192e486f3cfa3;hp=e0111b00e4b03254915299a1844525a7cbead7d6;hb=236fd15bbbae94b7a76473ba3f93e2f0e94d28d6;hpb=eb2b5fc938fcc2fdc290da0b4a94ddbd9ed5cc76 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