如何将不同的数据从视图传递到模板?

时间:2012-01-26 21:29:34

标签: python django

我是一个相对较新的Django,并且碰到了一堵墙,但我相信这将是你们退伍军人的蛋糕之旅。我有一个项目列表,我在模板的表格中显示。这是没问题我在视图中创建一个对象(值列表)将它发送到模板并呈现表。但是,我还希望在我的模板上显示一堆count()显示为链接,点击后将进一步过滤显示的项目列表。例如,我可能在列表中的项目成本在25美元到50美元之间,我的链接会显示有20个符合该条件的项目。选择链接后,向url.py发送请求,然后执行进一步过滤查询集的视图,然后再次呈现模板。

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

我很感激您对如何解决此问题的任何建议,我真的很感谢代码示例,因为我仍然对某些Python / Django代码提出了挑战。

2 个答案:

答案 0 :(得分:3)

您可以根据需要向模板发送任意数量的列表或对象。模板上下文只是一个字典,您可以根据需要添加项目。

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

答案 1 :(得分: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>