簡體   English   中英

將視圖中的Django Queryset傳遞給模板

[英]Passing Django Queryset in Views to Template

我有一個Django Views,它具有一些邏輯,可以將正確的類別傳遞給模板。

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

我不知道如何將其傳遞給模板,我的模板代碼如下:

            {% 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 %}  

我很確定模板語法錯誤,但是如何將特定類別傳遞給模板? 因此,如果我有一個名為“主電源”的類別,如何將主電源的所有產品傳遞給模板。

您可以添加以下方法

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

現在,您可以在模板中訪問some_data變量。 您還可以根據需要添加任意數量的數據來更新上下文字典。

如果仍要使用get_queryset方法,則可以將模板中的queryset作為object_list

{% for product in object_list %}
...
{% endfor %}

ListView中來自queryset的項目在模板中以object_list形式提供,因此您需要執行以下操作:

{% for product in object_list %}
            <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 %}

您可以在ListView文檔中找到詳細信息。 注意一個叫做get_context_data的方法-它返回一個變量和值的字典,該字典將被傳遞給模板。 您始終可以在源代碼中找到它為何如此工作的原因。

將數據傳遞到模板上下文的一種更優雅的方法是使用內置的view變量。 因此,您可以簡單地創建一個返回查詢集的自定義方法,而不是覆蓋get_context_data()方法:

def stores(self):
    return Store.objects.all()

然后,您可以在模板中使用它:

{% for store in view.stores %}
  ...
{% endfor %}

也可以看看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM