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

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 中的模板?

Django 2.0:将数据从视图发送到包含在另一个模板中的模板(2 个不同的应用程序)

ASP.Net MVC 将数据从视图传递到不同文件夹中的控制器

如何将 JSON 数据从登录视图传递到多个视图控制器,是不是可能?

如何在模板中将数据从 Flask 传递到 JavaScript?

使用 Ajax、Django 将上下文传递到模板中