簡単なテンプレート フィルターを作成します。
@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.