2012-01-26 54 views
1

我是一个相对较新的Django,刚刚遇到了一堵墙,但我相信这将成为您在那里的老兵的蛋糕散步。我有一个我在模板中的表格中显示的项目列表。这是没有问题的我在我的视图中创建一个对象(值的列表)发送到模板并呈现表。不过,我还想在我的模板上显示一大堆count()的链接,点击时会进一步过滤显示的项目列表。例如,我可能在列表中的商品价格在25美元到50美元之间,我的链接会显示有20个商品符合该条件。当选择链接时,向url.py发送请求,然后执行进一步过滤查询集的视图,然后再次呈现模板。如何将不同的数据从视图传递到模板?

如何获取count()信息到模板?我不认为我可以向模板发送两个单独的列表(对象)(至少我还没有弄清楚如何)。我想我需要在视图中获取计数,然后以某种方式将它们追加到我的列表对象中,但我不确定如何执行此操作,也不太清楚如何解析模板中的这些值。我希望计数与我的列表对象中生成的表格分开显示,并且我有点担心我会弄乱现在工作正常的我的表格。

如果您有任何关于如何解决这个问题的建议,我将不胜感激,并且我会非常感谢代码示例,因为我仍然对Python/Django代码提出了挑战。

回答

3

只要您愿意,您可以发送尽可能多的列表或对象到模板。模板上下文只是一个字典,您可以根据需要添加项目。

context = { 
    'list1': my_first_list, 
    'list2': my_second_list, 
    ... 
} 
+0

感谢丹尼尔,这就是我一直在寻找。 – BillB1951

0

您的要求是模糊的。代码有帮助。也。句子结束句子的帮助。

我想我需要在视图来获得计数,然后以某种方式把它们添加到我的列表对象

如何在模板解析这些值。

这是一种方法。它不使用聚合函数。他们更高效,但也更难理解。 https://docs.djangoproject.com/en/1.3/topics/db/aggregation/

您的看法是这样的:

object_list = Model.objects.filter(some_attribute=some_value) 

你这样做在你的表格看到一个计数。

{% for obj in object_list %} 
    <tr><td>{{obj.name}}</td> <td>{{obj.related_set.count}}</td><tr> 
{% endfor %} 

这会为您评估obj.related_set.count()。这不是最有效的(聚合效率更高)。但很简单。

如果你想有一个链接,你会更换简单{{obj.related_set.count}}的东西,包括一个链接

<a href="{% url "some.view.function" obj.id %}">{{obj.related_set.count}}</a> 
+0

谢谢。我曾考虑过这样做,但担心它的效率,因为数据集可能非常大,我得到了大量的数据。 “关注效率”的 – BillB1951

+0

。永远不要“担心”。始终测量。和。如果您正在使用聚合,请研究Django中的聚合查询。 –

相关问题