1. ホーム
  2. python

[解決済み] django テンプレートでのカンマ区切りリスト

2023-06-27 02:47:39

質問

もし fruits がリスト ['apples', 'oranges', 'pears'] ,

は、django テンプレートタグを使用して、"apples, oranges, and pears" を生成する素早い方法がありますか?

ループを使ってこれを行うのは難しくないことは知っています。 {% if counter.last %} ステートメントを使用することは難しいことではありませんが、これを繰り返し使用することになるため、カスタム タグの書き方を勉強する必要がありそうだ。 フィルタの書き方を学ぶ必要がありそうで、すでに行われていることなら車輪の再発明はしたくありません。

拡張機能として、私の試みは オックスフォード コンマ を削除しようとすると (つまり "apples, oranges and pears" を返す)、さらに面倒なことになります。

どのように解決するのですか?

以下は、私の問題を解決するために書いたフィルタです(オックスフォード・カンマは含まれていません)。

def join_with_commas(obj_list):
    """Takes a list of objects and returns their string representations,
    separated by commas and with 'and' between the penultimate and final items
    For example, for a list of fruit objects:
    [<Fruit: apples>, <Fruit: oranges>, <Fruit: pears>] -> 'apples, oranges and pears'
    """
    if not obj_list:
        return ""
    l=len(obj_list)
    if l==1:
        return u"%s" % obj_list[0]
    else:    
        return ", ".join(str(obj) for obj in obj_list[:l-1]) \
                + " and " + str(obj_list[l-1])

テンプレートで使うには {{ fruits|join_with_commas }}