【发布时间】:2011-08-23 14:27:16
【问题描述】:
作为 Django 中关键字云函数的一部分,我正在尝试输出字符串列表。是否有模板过滤器可让您随机播放列表中的项目?我认为这很简单,但我在官方文档中找不到任何适用的过滤器。
【问题讨论】:
-
没有这样的标签,但你可以很容易地滚动你自己的标签/过滤器。您可以使用
random.shuffle()进行改组,但请注意,这是就地改组。
作为 Django 中关键字云函数的一部分,我正在尝试输出字符串列表。是否有模板过滤器可让您随机播放列表中的项目?我认为这很简单,但我在官方文档中找不到任何适用的过滤器。
【问题讨论】:
random.shuffle() 进行改组,但请注意,这是就地改组。
制作你的很简单。
# app/templatetags/shuffle.py
import random
from django import template
register = template.Library()
@register.filter
def shuffle(arg):
tmp = list(arg)[:]
random.shuffle(tmp)
return tmp
然后在您的模板中:
{% load shuffle %}
<ul>
{% for item in list|shuffle %}
<li>{{ item }}</li>
{% endfor %}
</ul>
【讨论】:
补充一下,如果是查询集,由于无法分配对象列表,它会抛出错误。这是一个修复 christophe31 的代码:
import random
from django import template
register = template.Library()
@register.filter
def shuffle(arg):
return random.shuffle([i for i in arg[:]])
【讨论】:
args[:]替换为list(args),这将修复Queryset的情况并避免分配错误。
'QuerySet' 对象不支持项分配
【讨论】: