我会做一个简单的模板过滤器:
@register.filter
def format_list(li):
"""
Return the list as a string in human readable format.
>>> format_list([''])
''
>>> format_list(['a'])
'a'
>>> format_list(['a', 'b'])
'a and b'
>>> format_list(['a', 'b', 'c'])
'a, b and c'
>>> format_list(['a', 'b', 'c', 'd'])
'a, b, c and d'
"""
if not li:
return ''
elif len(li) == 1:
return li[0]
return '%s and %s' % (', '.join(li[:-1]), li[-1])
我远非 python 专家,可能有更好的方法来做到这一点。但是,这在“django 级别”似乎很干净,这样使用它:
{{ your_list|format_list }}
我喜欢这个解决方案的地方在于它是可重用的,更具可读性,代码更少,并且有测试。
查看有关编写模板过滤器的文档以获取有关如何安装它的详细信息。
此外,您可能会注意到此功能附带 doctests,请参阅django 文档以了解如何运行测试。
这里有一个方法:
>>> python -m doctest form.py -v
Trying:
format_list([''])
Expecting:
''
ok
Trying:
format_list(['a'])
Expecting:
'a'
ok
Trying:
format_list(['a', 'b'])
Expecting:
'a and b'
ok
Trying:
format_list(['a', 'b', 'c'])
Expecting:
'a, b and c'
ok
Trying:
format_list(['a', 'b', 'c', 'd'])
Expecting:
'a, b, c and d'
ok
1 items had no tests:
form
1 items passed all tests:
5 tests in form.format_list
5 tests in 2 items.
5 passed and 0 failed.
Test passed.