【问题标题】:django for loop random order determinedjango for循环随机顺序确定
【发布时间】:2015-08-25 18:13:10
【问题描述】:

我想要一个包含 10 个主要标签的标签列表,但以随机顺序显示,因为字体粗细将决定它们的粗细。

首先我订购对象并获得 10 个标签,然后我使用 shuffle 来随机化顺序。到目前为止它有效。我现在的问题是在模板中使用 {{forloop.counter0}} 以随机顺序输出以下代码:

    <tr>
        <td class="tag-0">Tag3</td>
    </tr>
    <tr>
        <td class="tag-1">Tag1</td>
    </tr>
    <tr>
        <td class="tag-2">Tag2</td>
    </tr>

相反,我希望它是这样的:

<tr>
    <td class="tag-2">Tag3</td>
</tr>
<tr>
    <td class="tag-0">Tag1</td>
</tr>
<tr>
    <td class="tag-1">Tag2</td>
</tr>

模板:

{% for t in tags %}
    <tr>
        <td class="tag-{{forloop.counter0}}">{{t.title}}</td>
    </tr>
{% endfor %}

在视图中:

tags = list(Model.objects.order_by('title')[:10])
random.shuffle(tags)

【问题讨论】:

    标签: python django for-loop random


    【解决方案1】:

    我会创建一个模型管理器来进行初始过滤,然后随机化视图中对象的顺序。您想尝试采取“胖”模型,“瘦”视图的方法。您可以在模型中做的越多,就越容易进行更改。例如,

    models.py:

    class FooManager(models.Manager):
        def get_titles(self):
            return super(FooManager, self).get_queryset.order_by('title')
    
    class Foo(models.Model):
        title = models.CharField(max_length=120)
    
        objects = FooManager()
    
        def __unicode__(self):
            return self.title
    

    views.py:

    def view(request):
        get_titles = Foo.objects.get_titles()[:10]
        titles = list(get_titles)
        random.shuffle(titles)
    
        context = {
            'titles': titles
        }
        return render(request, 'template.html', context)
    

    您的模板也变得容易多了。

    html:

    {% for t in titles %}
        {{ t.title }}
    {% endfor %}
    

    希望对您有所帮助!祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 2021-10-12
      • 2012-05-20
      相关资源
      最近更新 更多