将视图中的 Django 查询集传递给模板

Rut*_*net 3 python django django-models django-forms django-queryset

我有一个 Django 视图,它有一些逻辑可以将正确的类别传递给模板。

class ProductListView(ListView):
    model = models.Product
    template_name = "catalogue/catalogue.html"

    def get_queryset(self):
        category = self.kwargs.get("category")
        if category:
            queryset = Product.objects.filter(category__iexact=category)
        else:
            queryset = Product.objects.all()
        return queryset
Run Code Online (Sandbox Code Playgroud)

我不知道如何将它传递给模板,我的模板代码如下:

            {% for product in products %}
            <tr>   
                <td><h5>{{ product.name }}</h5>
                <p>Cooked with chicken and mutton cumin spices</p></td>
                <td><p><strong>£ {{ product.price }}</strong></p></td>
                <td class="options"><a href="#0"><i class="icon_plus_alt2"></i></a></td>
            </tr>
            {% endfor %}  
Run Code Online (Sandbox Code Playgroud)

我很确定我的模板语法是错误的,但是如何将特定类别传递给模板?因此,如果我有一个名为“Mains”的类别,我如何将电源的所有产品传递给模板。

Dal*_*tor 6

您可以添加以下方法

def get_context_data(self, **kwargs):
    context = super(ProductListView, self).get_context_data(**kwargs)
    some_data = Product.objects.all()
    context.update({'some_data': some_data})
    return context
Run Code Online (Sandbox Code Playgroud)

所以现在,在您的模板中,您可以访问some_data变量。您还可以根据需要添加任意数量的数据来更新上下文字典。

如果您仍然想使用该get_queryset方法,那么您可以在模板中访问该查询集object_list

{% for product in object_list %}
...
{% endfor %}
Run Code Online (Sandbox Code Playgroud)