0

ブログのタグの表示をフォーマットしようとしています。tag1、tag2、tag3 などを一覧表示できます。問題ありません。これで最後のコンマを削除する方法さえ見つけました:

{% if not forloop.last %}, {% endif %}

私の質問は...どうすれば「and」に対処できますか?

例: tag1、tag2、tag3。

ここにルールがあります

2 つのタグ = であり、コンマ区切りがない場合。3 つ以上のタグ = 最後から 2 番目のタグが "and" を取得する場合、リストの最後にコンマまたは and はありません。

このようなものでjinja2でそれらの表示ルールを作成できることを望んでいました...

{% if loop.index == forloop.last - 1 %}and {% endif %}

もちろん、このコードの結果は

Raise TemplateSyntaxError、「'if' ステートメントの形式が不適切です」 TemplateSyntaxError: 'if' ステートメントの形式が不適切です

アプリでこれを行うように誰かに言われる気がします。テンプレートではありません..しかし、理由を説明してください...カスタムフィルターでこれを行う必要がありますか?

4

1 に答える 1

1

テンプレートからできるだけ多くのロジックを削除して、プレゼンテーションに集中し、ページ レンダリングに障害点を追加しないようにすることをお勧めしますが、境界線上のケースが常に存在します。

組み込みのjoin. プレーンテキストのタグ名のリストを受け取り、文字列を返す例を次に示します。

def join_tags(tags):
    if not tags:
        return '(no tags)'
    elif len(tags) == 1:
        return tags[0]
    else:
        return ', '.join(tags[:-1]) + ' and ' + tags[-1]

app.jinja_env.filters['join_tags'] = join_tags

テンプレートの使用法:

{{ tags|join_tags }}

フィルター内にマークアップも追加する場合は、safeフィルターを結果に適用して、エスケープされないようにする必要があります。

于 2013-03-04T15:58:19.933 に答える