From 236fd15bbbae94b7a76473ba3f93e2f0e94d28d6 Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Fri, 16 Jan 2009 22:18:52 +0100 Subject: [PATCH] Add natural_list template filter. This template filter transforms lists like ['foo', 'bar', 'baz'] into a natural list like 'foo, bar and baz'. --- tools/templatetags/list.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) 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 -- 2.30.2