Django模板中的逗号分隔列表

2024-04-25 18:00:17 发布

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

如果fruits是列表['apples', 'oranges', 'pears']

有没有一种快速的方法使用django模板标签来生产“苹果、桔子和梨”?

我知道使用循环和{% if counter.last %}语句来实现这一点并不困难,但是因为我要反复使用它,我想我必须学习如何编写自定义的标记过滤器,如果已经完成了,我不想重新设计轮子。

作为一个扩展,我试图删除Oxford Comma(即返回“苹果、桔子和梨”)甚至更混乱。


Tags: django方法苹果模板列表ifcounter标签
3条回答

我建议使用自定义django模板过滤器而不是自定义标记--过滤器更简单更方便(在适当的情况下,如这里所示)。{{ fruits | joinby:", " }}看起来像是我想要的。。。使用自定义的joinby筛选器:

def joinby(value, arg):
    return arg.join(value)

如你所见,这就是简单本身!

这里有一个超级简单的解决方案。将此代码放入comma.html:

{% if not forloop.last %}{% ifequal forloop.revcounter 2 %} and {% else %}, {% endifequal %}{% else %}{% endif %}

现在不管你把逗号放在哪里,都要包括“comma.html”:

{% for cat in cats %}
Kitty {{cat.name}}{% include "comma.html" %}
{% endfor %}

更新:@user3748764为我们提供了一个更紧凑的版本,没有不推荐的ifequal语法:

{% if not forloop.first %}{% if forloop.last %} and {% else %}, {% endif %}{% endif %}

请注意,它应该在元素之前使用,而不是在元素之后使用。

第一个选择:使用现有的连接模板标记。

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#join

这是他们的例子

{{ value|join:" // " }}

第二个选择:在视野中做。

fruits_text = ", ".join( fruits )

向模板提供fruits_text以进行呈现。

相关问题 更多 >