首页 > 解决方案 > 如何从模板引用 django 视图中的设置对象?

问题描述

我在数据库中有如下形式的数据:

collection_name|manufacturer|product_type|description|image_url
----------------------------------------------------------------
Testing        |FakeCo      |Bed         |pretty nice|/img/1.jpg
Testing        |FakeCo      |Desk        |pretty bad |/img/2.jpg
Testing        |FakeCo      |Nightstand  |pretty ok  |/img/1.jpg
Testing        |FakeCo      |Draws       |pretty nice|/img/3.jpg

最初,我使用 for 循环来显示每个结果中的字段,最终结果如下:这个:.

对于上面的示例数据集,我要做的是仅显示某些字段的第一个结果,知道它们对于返回的所有行都是相同的,然后对于剩余的字段仅在它们不同时显示它们。

我尝试在我的 django 视图中使用集合,因为另一个答案表明这将消除重复并解决我的问题。

我的 Django 视图:

def collection_detail(request, name=None):
    template = loader.get_template('/webapps/my_webapp/furniture_site/main_page/templates/main_page/product-detail.html')
    products = product.objects.filter(collection_name=name)
    collection_name = []
    manufacturer = []
    description = []
    image_url = []
    for product in products:
        collection_name.append(product.collection_name)
        manufacturer.append(product.manufacturer)
        description.append(product.description)
        image_url.append(product.image_url)
    collection_name = set(collection_name)
    manufacturer = set(manufacturer)
    description = set(description)
    image_url = set(image_url)
    context={'products': products}
    return HttpResponse(template.render(context))

我的问题是,我无法在我的模板中引用这些设置项。

例如,在我的模板中使用:

                {% for instance in products %}
                {{ instance.collection_name }} Collection <br />
                {% endfor %}

什么都不返回,就像

                {% for instance in products %}
                {{ collection_name }} Collection <br />
                {% endfor %}

引用通过模板中的视图返回的项目的正确方法是什么?

最终,我试图获得如下结果(注意描述和集合名称仅使用一次,并且不返回重复的图像 url)。

在此处输入图像描述

标签: djangodjango-templatesdjango-views

解决方案


首先,您没有将正确的数据传递给您的模板。

您需要在您的上下文中传递,collection_namemanufacturerdescriptionimage_url

context = {
    'products': products,
    'collection_name': collection_name,
    'manufacturer': manufacturer,
    'description': description,
    'image_url': image_url
}

现在您可以在模板中访问这些,例如:

{% for instance in collection_name %}
    {{ instance }} Collection <br />
{% endfor %}

其他人也一样。


推荐阅读