【问题标题】:django shuffle in templates模板中的 django shuffle
【发布时间】:2011-08-23 14:27:16
【问题描述】:

作为 Django 中关键字云函数的一部分,我正在尝试输出字符串列表。是否有模板过滤器可让您随机播放列表中的项目?我认为这很简单,但我在官方文档中找不到任何适用的过滤器。

【问题讨论】:

  • 没有这样的标签,但你可以很容易地滚动你自己的标签/过滤器。您可以使用random.shuffle() 进行改组,但请注意,这是就地改组。

标签: django templates shuffle


【解决方案1】:

制作你的很简单。

# 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>

【讨论】:

    【解决方案2】:

    补充一下,如果是查询集,由于无法分配对象列表,它会抛出错误。这是一个修复 christophe31 的代码:

    import random
    from django import template
    register = template.Library()
    
    @register.filter
    def shuffle(arg):
        return random.shuffle([i for i in arg[:]])
    

    【讨论】:

    • 虽然我很喜欢你在这里的简单尝试,但应该注意的是 random.shuffle 只返回 None 并且只改变传递给它的可变列表。因此,您需要像 @christophe31 那样事先复制该列表。 def shuffle(arg): tmp = [i for i in arg] random.shuffle(tmp) return tmp
    • 或者我们可以简单地将args[:]替换为list(args),这将修复Queryset的情况并避免分配错误。
    【解决方案3】:

    'QuerySet' 对象不支持项分配

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-21
      • 2010-11-02
      • 2012-01-19
      • 2010-12-19
      • 2015-10-16
      • 2012-09-19
      • 2018-06-15
      • 2013-10-31
      相关资源
      最近更新 更多