2024-04-25 18:00:17 发布
网友
如果fruits是列表['apples', 'oranges', 'pears']
fruits
['apples', 'oranges', 'pears']
有没有一种快速的方法使用django模板标签来生产“苹果、桔子和梨”?
我知道使用循环和{% if counter.last %}语句来实现这一点并不困难,但是因为我要反复使用它,我想我必须学习如何编写自定义的标记过滤器,如果已经完成了,我不想重新设计轮子。
{% if counter.last %}
作为一个扩展,我试图删除Oxford Comma(即返回“苹果、桔子和梨”)甚至更混乱。
我建议使用自定义django模板过滤器而不是自定义标记--过滤器更简单更方便(在适当的情况下,如这里所示)。{{ fruits | joinby:", " }}看起来像是我想要的。。。使用自定义的joinby筛选器:
{{ 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以进行呈现。
fruits_text
我建议使用自定义django模板过滤器而不是自定义标记--过滤器更简单更方便(在适当的情况下,如这里所示)。
{{ fruits | joinby:", " }}
看起来像是我想要的。。。使用自定义的joinby
筛选器:如你所见,这就是简单本身!
这里有一个超级简单的解决方案。将此代码放入comma.html:
现在不管你把逗号放在哪里,都要包括“comma.html”:
更新:@user3748764为我们提供了一个更紧凑的版本,没有不推荐的ifequal语法:
请注意,它应该在元素之前使用,而不是在元素之后使用。
第一个选择:使用现有的连接模板标记。
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#join
这是他们的例子
第二个选择:在视野中做。
向模板提供
fruits_text
以进行呈现。相关问题 更多 >
编程相关推荐