【问题标题】:How can I get a random value of a list of objects using custom filters?如何使用自定义过滤器获取对象列表的随机值?
【发布时间】:2017-05-14 01:03:38
【问题描述】:

我试图直接在我的模板上的对象列表中获取单个随机对象。

这是我正在尝试做的一个例子:

views.py 是这样的:Font.objects.all()

模板文件:

{% for f in Fo.checkbox.all %}       #f|random_choice doesn't work here.
    <p>{{ f.font_name|random_choice }}</p>     #gives me a single random character of each object.
{% endfor %}

上面的示例为我提供了列表中每个对象的单个随机字符,但我试图在对象列表中获取一个随机对象。

这里是 templatetag 文件:

@register.filter(name='random_choice')
def random_choice(l):
    return random.choice(list(l))

我该怎么做?

【问题讨论】:

  • 显示更多views.py。你传递给模板的上下文是什么? Fo.checkbox 是从哪里来的?如果您的视图中有类似 fonts=Font.objects.all() 的内容,并将其作为 {'fonts': fonts,} 传递,那么在您的模板中 {{ fonts|random }} 应该可以工作。你似乎已经在循环一些东西了。预感是你可能想要 {{ Fo.checkbox.all|random }}

标签: python django django-templates django-template-filters


【解决方案1】:

它已经内置在https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#random

{{ my_list | random }}

如果这是为了面试,而你给出的答案不是这个……我不想告诉你,但你可能没有给出他们想要的答案……

{{ Fo.checkbox.all | random }}  {# print one random value from Fo.checkbox.all #}

【讨论】:

  • 我知道它已经存在,但我应该把它放在哪里显示来自Fo.checkbox.all的随机结果
  • 现在我收到此错误:'Font' object is not iterable 为什么?
  • 尝试打印它...这已经超出了我认为您的问题范围...
猜你喜欢
  • 2020-06-08
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
相关资源
最近更新 更多