循环长度ins金贾2

2024-04-24 12:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我的问题是。。。我怎么处理“和”?在

例如:tag1、tag2和tag3。在

这是规则

如果两个标记=并且没有逗号分隔。 如果3个或更多标记=从第二个到最后一个得到“和” 不要在列表末尾加逗号或和。在

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

^{pr2}$

当然,这段代码会导致

raise TemplateSyntaxError, "'if' statement improperly formatted" TemplateSyntaxError: 'if' statement improperly formatted

我感觉有人会告诉我在应用程序中执行此操作,而不是模板。。但请解释一下为什么。。。我应该用一个自定义的过滤器吗?在


Tags: 标记if规则格式not标签statement逗号
1条回答
网友
1楼 · 发布于 2024-04-24 12:24:28

建议使用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

模板使用:

^{pr2}$

如果您还在筛选器中添加标记,则必须对结果应用safe筛选器,这样它就不会被转义。在

相关问题 更多 >