如何将不同的数据从视图传递到模板?
Posted
技术标签:
【中文标题】如何将不同的数据从视图传递到模板?【英文标题】:How do I pass dissimilar data from view to template? 【发布时间】:2012-02-19 23:44:30 【问题描述】:我是 Django 的新手,刚刚碰壁,但我相信这对你们这些退伍军人来说是小菜一碟。我有一个我在模板的表格中显示的项目列表。没问题,我在视图中创建了一个对象(值列表),将其发送到模板并渲染表格。但是,我还想在我的模板上显示一堆 count()
显示为链接,单击时将进一步过滤显示的项目列表。例如,我的列表中可能有价格在 25 美元到 50 美元之间的商品,我的链接会显示有 20 件商品符合该条件。当链接被选中时,会向 url.py 发送一个请求,该 url.py 会执行进一步过滤查询集的视图,然后再次呈现模板。
如何将count()
信息添加到模板中?我认为我不能将两个单独的列表(对象)发送到模板(至少我还不能弄清楚如何)。我想我需要在视图中获取计数,然后以某种方式将它们附加到我的列表对象中,但我不知道该怎么做,也不知道如何在模板中解析这些值。我希望计数与从我的列表对象生成的表格分开显示,我有点担心我会弄乱我现在工作正常的表格。
如果您对如何解决这个问题提出任何建议,我将不胜感激,我也非常感谢代码示例,因为我仍然在某种程度上受到 Python/Django 代码的挑战。
【问题讨论】:
【参考方案1】:您可以根据需要向模板发送任意数量的列表或对象。模板上下文只是一个字典,您可以根据需要向其中添加项目。
context =
'list1': my_first_list,
'list2': my_second_list,
...
【讨论】:
谢谢丹尼尔,这正是我想要的。【参考方案2】:您的要求含糊不清。代码有帮助。还。句末句号很有帮助。
我想我需要在视图中获取计数,然后以某种方式将它们附加到我的列表对象中
如何在模板中解析这些值。
这是一种方法。它不使用聚合函数。它们效率更高,但也更难理解。 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>
【讨论】:
谢谢。我曾考虑过这样做,但担心它的效率,因为数据集可能非常大,而且我得到了大量的计数。 “关注效率”。永远不要“担心”。总是测量。和。如果您正在使用聚合,请研究 Django 中的聚合查询。以上是关于如何将不同的数据从视图传递到模板?的主要内容,如果未能解决你的问题,请参考以下文章
Django 2.0:将数据从视图发送到包含在另一个模板中的模板(2 个不同的应用程序)
ASP.Net MVC 将数据从视图传递到不同文件夹中的控制器
如何将 JSON 数据从登录视图传递到多个视图控制器,是不是可能?