【问题标题】:Django: Using same object how to show 2 different results in django template?Django:使用相同的对象如何在 Django 模板中显示 2 个不同的结果?
【发布时间】:2015-05-10 07:20:49
【问题描述】:

使用相同的对象如何使用 django 模板显示 2 个不同的结果?

一个页面有两个div,应该使用同一个对象显示不同的信息。

输入

对象数据有跟随

[
    {
        "Google": [
            {
                "Rating": 1,
                "Website": {
                    "id": "1",
                    "Name": "googleplus"
                }
            },
            {
                "Rating": 2,
                "Website": {
                    "id": "1",
                    "Name": "googleplus"
                }
            },
            {
                "Rating": 1,
                "Website": {
                    "id": "2",
                    "Name": "googlemap"
                }
            }
        ]
    },
    {
        "Facebook": [
            {
                "Rating": 1,
                "Website": {
                    "id": "1",
                    "Name": "facebookplus"
                }
            },
            {
                "Rating": 2,
                "Website": {
                    "id": "1",
                    "Name": "facebookplus"
                }
            },
            {
                "Rating": 1,
                "Website": {
                    "id": "2",
                    "Name": "facebookmap"
                }
            }
        ]
    }
]

期望的输出

DIV 1(网站名称应该是唯一值)

DIV 2(应显示所有网站名称)

主 div 开始

循环 1

Google  ------  DIV 1 (googleplus, googlemap) ------ DIV 2 (googleplus, googleplus, googlemap) 

循环 2

Facebook  ------  DIV 1 (facebookplus, facebookmap) ------ DIV 2 (facebookplus, facebookplus, facebookmap) 

主 div 结束

【问题讨论】:

    标签: python django


    【解决方案1】:

    模板仅用于显示给定数据。如果要操作数据,则必须在视图中执行此操作。会容易很多,因为你可以使用普通的python语法。

    你可以使用类似的东西:

    all_data = <object_name>.objects.all()
    unique_data = list(set(all_data))
    

    更新

    如果您想在前端执行此操作,我建议您使用Lodash library

    但是你当然可以用纯 JavaScript 来做:

    var all_data = ...;
    var unique_data = [];
    for (i = 0; i < all_data.length; i++) {
        if (unique_data.indexOf(all_data[i]) < 0) unique_data.push(all_data[i]);
    }
    

    【讨论】:

    • 嗨,这些信息不是来自模型,而是来自 REST API 的动态数据。还有一件事,我给出了简单的场景,列表数应该超过 5000
    • 那么您将不得不在 JavaScript 中执行此操作。无法操作在 Python 渲染时不存在的数据。
    • 第二个选项是创建两个 API 端点,一个包含所有数据,另一个具有唯一名称。
    • 当列表长度超过 10,000 并且如果我创建 2 个 API 端点时,应用程序应该会很慢。概念是我手中只有一个对象,使用它显示了 2 个不同的结果
    • 在javascript中怎么做?你能提供一个样本吗
    猜你喜欢
    • 2018-10-07
    • 2020-09-29
    • 2012-08-10
    • 2020-05-21
    • 1970-01-01
    • 2012-07-26
    • 2011-07-29
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多