从带有模板的对象列表中获取随机对象

时间:2016-12-29 13:01:05

标签: python django django-templates

我在我的模型数据库中列出了来自其他模型的每个图标下的每个字体。

我想为每个图标获取一个随机字体。

以下是我展示模板文件的方式:

{% for Fo in FormOne %}
    {% for Ft in FormTwo %}
        {% for f in Ft.icon.all %}          
            <p>{{ f.icon_name }}</p>        #for each icon name
            {% for f in Fo.checkbox.all %}
                <p>{{ f.font_name }}</p>    #show one random font name.
            {% endfor %}
        {% endfor %}
    {% endfor %}
{% endfor %}

我得到了这样的观点:

context = {'FormOne':FormOne.objects.all(), 'FormTwo':FormTwo.objects.all()}

这是我的模型结构:

class Font(models.Model):
    font_name = models.CharField(max_length=100)
    font_css = models.CharField(max_length=100)

class FormOne(models.Model):
    name = models.CharField(max_length=40)
    checkbox = models.ManyToManyField(Font, blank=True)
    ...

class Icons(models.Model):
    icon_name = models.CharField(max_length=100)
    ...

class FormTwo(models.Model):
    owner = models.ForeignKey(FormOne)
    icon = models.ManyToManyField(Icons, blank=True)
    ...

我怎样才能实现它?

1 个答案:

答案 0 :(得分:0)

您可以使用custom filters

这是一个从列表中选择随机元素的过滤器:

import random
from django import template

register = template.Library()

@register.filter('random_font', random_font)
def random_font(l):       
    f = dict(random.choice(list(l)))
    return "%s : %s" % (f['font_name'], f['font_css'])

n.b.,编写第一个自定义过滤器有很多工作,包括创建register实例,注册自定义过滤器 使用register.filter装饰器和load您的自定义库 模板中的过滤器。