我正在尝试格式化博客的标签显示。我可以列出tag1,tag2,tag3等......就好了。我甚至想出了如何消除最后一个逗号:
{% if not forloop.last %}, {% endif %}
我的问题是......我如何处理“和”?
例如:tag1,tag2和tag3。
这是规则
如果两个标签=并且没有逗号分隔。 如果3个或更多标签=倒数第二个获得“和” 从来没有逗号或列表的末尾。
我希望我能用这样的东西在jinja2中创建那些显示规则......
{% if loop.index == forloop.last - 1 %}and {% endif %}
当然,此代码会导致
引发TemplateSyntaxError,“'如果'语句格式不正确” TemplateSyntaxError:'if'语句格式不正确
我感觉有人会在应用程序中告诉我这样做;不是模板..但请解释原因......我应该使用自定义过滤器吗?
答案 0 :(得分:1)
建议remove as much logic as possible from templates,以便您可以专注于演示并避免在页面渲染中添加失败点,但总是存在边缘情况。
如果您定义类似于内置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
过滤器应用于结果,以便不会对其进行转义。