我想要一个包含10个主要标签的标签列表,但是以随机顺序显示,因为字体重量将决定它们的重量。
首先我订购对象并获得10个标签,而不是使用随机播放来随机化订单。到目前为止它的作用。我现在的问题是在模板中使用{{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)
答案 0 :(得分: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 %}
我希望有所帮助!祝你好运!