在 django 模板中索引 QuerySet 数组

Posted

技术标签:

【中文标题】在 django 模板中索引 QuerySet 数组【英文标题】:Indexing a QuerySet array in django templates 【发布时间】:2015-02-19 18:35:50 【问题描述】:

我正在尝试访问从模板中的视图传递的查询集数组。我想使用数字迭代器索引每个条目。我正在使用 django sn-p 来获取客户范围。这是我到目前为止所做的:

% for cust in customer_comments %
    % for i in cust|length|get_range %
    <tr>
        <td>cust.i.customer_id</td>
        <td>cust.i.feedback_detail</td>
    </tr>
    % endfor %                                                    
% endfor %

当我使用cust.i.customer_id 进行迭代时,它什么也不显示。但是当我使用cust.0.customer_idcust.1.customer_id 时,它会显示我想要的内容。请帮助我为什么不工作。

顺便说一句,这就是我在视图中初始化 customer_comments 对象的方式。

customer_comments = []
for i in all_features:
   if OpenFeedback.objects.filter(feature_id = i.feature_id).exists(): 
      feedback_obj = OpenFeedback.objects.filter(feature_id = i.feature_id)
      customer_comments.append(feedback_obj)

【问题讨论】:

为什么不简单地遍历cust 列表而不对其进行索引呢? cust.i 将被循环变量替换。 你的意思是像 cust.customer_id?即使我这样做,也没有任何显示。我只是似乎不明白为什么 cust.0.customer_id 有效而 cust.i.customer_id 无效。 how to run this code in django template的可能重复 @user590028 那么我应该像这样进行索引吗? cust.forloop.counter0.customer_id 请告诉我确切的语法,我是 Django 的初学者 【参考方案1】:

您不会像在 Python 或 Django 模板中那样进行迭代:您会遍历列表本身。

% for customer in cust %
<tr>
    <td>customer.customer_id</td>
    <td>customer.feedback_detail</td>
</tr>
% endfor %

【讨论】:

我不敢相信我在做什么。那太简单了。非常感谢!

以上是关于在 django 模板中索引 QuerySet 数组的主要内容,如果未能解决你的问题,请参考以下文章

在 django 模板中使用聚合 QuerySet 中的字段

在 Django 中过滤 Queryset 并设计正确的 urls.py 和模板

Django -> queryset[index] 索引超出范围

Django Queryset 不同视图的相同模板

在Django QuerySet上计算vs len

Django ORM 对 QuerySet 的迭代真的很慢