【问题标题】: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 代码的挑战。

【问题讨论】:

    标签: 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 中的聚合查询。
    猜你喜欢
    • 2020-03-19
    • 2019-02-16
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多