想要从另一个视图django打印出一个项目列表

时间:2011-02-08 15:34:23

标签: django templates list views

我有一个显示列表项的视图。

def edit_order(request, order_no):

try:
    status_list = models.Status.objects.all()
    order = models.Order.objects.get(pk = order_no)
    if order.is_storage:
        items = models.StorageItem.objects.filter(orderstoragelist__order__pk = order.pk)
    else:
        items = models.StorageItem.objects.filter(orderservicelist__order__pk = order.pk)
except:
    return HttpResponseNotFound()

我想将这些项目列表放在另一个视图中。不幸的是,事实证明这比我想象的更棘手。

@login_required
def client_items(request, client_id = 0):
    client = None
    items = None
    try:
        client = models.Client.objects.get(pk = client_id)
        items = client.storageitem_set.all()
        item_list = models.StorageItem.objects.filter(orderstoragelist__order__pk = order.pk)
    except:
        return HttpResponse(reverse(return_clients))
    return render_to_response('items.html', {'items':items, 'client':client, 'item_list':item_list}, context_instance = RequestContext(request))

我想也许我可以粘贴项目的定义并只调用item_list但这不起作用。任何想法

items.html

{% for item in item_list %}
    {{item.tiptop_id}
{% endfor %}

1 个答案:

答案 0 :(得分:0)

来自你的评论:

  

我看到一个白色的屏幕,屏幕上印有网址。 / tiptop / client在这种情况下。

因为这就是你所要求的:

except:
    return HttpResponse(reverse(return_clients))

这意味着如果上面有任何错误或问题,您的视图将只输出一个只包含该URL的响应。也许您打算使用HttpResponseRedirect,因此浏览器实际上会重定向到网址 - 但您仍然不应该使用空白except,因为它会阻止您查看实际出错的地方。

要回答主要问题,请考虑您的edit_order视图返回的内容:它会为您提供包含呈现模板的完整HTML响应。你如何在另一个视图中将其用作查询中的元素?你需要从逻辑上思考这一点。

一种可能的解决方案是定义一个单独的函数,它只返回您想要的数据 - 作为普通的查询集 - 并且两个视图都可以调用它。这样做你想要的吗?