0

我正在尝试为我的博客格式化标签的显示。我可以列出 tag1、tag2、tag3 等...很好。我什至想出了如何用这个消除最后一个逗号:

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

我的问题是......我该如何处理“和”?

例如:tag1、tag2 和 tag3。

这是规则

如果两个标签 = 并且没有逗号分隔。如果 3 个或更多标签 = 倒数第二个在列表末尾得到“和”永远不会是逗号或和。

我希望我可以用这样的东西在 jinja2 中创建这些显示规则......

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

当然,这段代码导致

引发 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 回答