我正在做一个Django课程的项目,我正在学习,但目前在观点上有些困难.

在项目中,我使用ListView创建了一个视图,以显示模板中的产品列表.通过使用Query_Set,我能够获取所有对象,并使用for循环返回它们以显示模板中的所有产品及其属性.

在同一个Query_Set中,我try 返回另一个包含库存商品总数的变量,以便在模板中也显示该数据,但是,一旦我将该变量添加到返回中,模板就不再接收返回值.

这是我试图返回这两个值的代码:

class ShopListing(ListView):
    template_name = "webshop/shop_listing.html"
    context_object_name = 'shop_listing'

    def get_queryset(self):
        #Get all products
        products = Product.objects.all()
        total_stock = products.aggregate(sum=Sum('stock'))['sum']
        return products, total_stock

在我的模板中,我添加了值‘TOTAL_STOCK’,如下所示,但我什么也得不到,甚至来自‘Products’的值也停止工作:

<p><strong>{{total_stock}}</strong> items are currently available</p>

如果我从返回中删除‘TOTAL_STOCK’,一切都会恢复正常.

如果我打印"TOTAL_STOCK",我可以在日志(log)中看到正确的值,但这不能在我的模板中使用,所以我想知道这样做的正确方法是什么.

如有任何指导,将不胜感激.

推荐答案

我怀疑这是因为get_queryset()背后的机制.通过返回一个附加值,您实际上向内部调用get_queryset()的视图类方法返回了tuple.您可以查看ListView的Django源代码及其相关类,以了解它们如何在幕后处理模型和模板上下文变量.

然而,根据您的描述,我认为您希望扩展get_context_data()方法:

class ShopListing(ListView):
    template_name = "webshop/shop_listing.html"
    context_object_name = 'shop_listing'
    queryset = Product.objects.all()

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['total_stock'] = Product.objects.aggregate(sum=Sum('stock'))['sum']
        return context

'total_stock'应与预期的QuerySet一起用作模板变量.

Python相关问答推荐

如何使用scikit-learn Python库中的Agglomerative集群算法以及集群中声明的对象数量?

如何将带有逗号分隔的数字的字符串解析为int Array?

创建带有二维码的Flask应用程序,可重定向到特定端点

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

Python中是否有方法从公共域检索搜索结果

剧作家Python没有得到回应

在函数内部使用eval(),将函数的输入作为字符串的一部分

如何在BeautifulSoup中链接Find()方法并处理无?

根据另一列中的nan重置值后重新加权Pandas列

非常奇怪:tzLocal.get_Localzone()基于python3别名的不同输出?

无法通过python-jira访问jira工作日志(log)中的 comments

如何在Python中并行化以下搜索?

运输问题分支定界法&

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

下三角形掩码与seaborn clustermap bug

python sklearn ValueError:使用序列设置数组元素

PYTHON、VLC、RTSP.屏幕截图不起作用

Python pint将1/华氏度转换为1/摄氏度°°

判断Python操作:如何从字面上得到所有decorator ?

使用SeleniumBase保存和加载Cookie时出现问题