首页 > 解决方案 > Django:基于类的视图的extra_content不显示任何数据

问题描述

我正在尝试创建一个显示“案例”中所有项目的网站,并且在顶部我想显示“案例”中所有项目的总值。要获得这个数字,您将获得箱子中的所有物品,将它们的价值和数量相乘,然后将它们全部加起来。但是,当我将其传递给我时,extra_content什么都没有显示。任何帮助都是极好的!

我的观点:

class CaseHome(ListView):
    model = CaseItem
    template_name = 'mycase/casehome.html'
    total = CaseItem.objects.all().aggregate(total=Sum(F('Item_Price')*F('Item_Quantity')))['total']
    extra_content = {'my_total': total}

我的模型:

class CaseItem(models.Model):
    Item_Title = models.CharField(max_length=200)
    Item_Price = models.DecimalField(default=0, max_digits=10, decimal_places=2)
    Item_Quantity = models.DecimalField(default=0, max_digits=10, decimal_places=2)

    def __str__(self):
        return self.Item_Title + ' | ' + str(self.Item_Quantity) + ' * $' + str(self.Item_Price)

    def get_absolute_url(self):
        return reverse('home')

我的模板:

{% block content %}
    <p>{{my_total}}</p>
    {% for item in object_list %}
        <div class="container">
            <div class="item" style="border: 2px solid black; margin: 3px; padding: 3px">
                <a href="{% url 'item-editor' item.pk %} "><h3 style="display: inline-block">{{ item.Item_Title }}</h3><h5 style="float: right"><span class="badge bg-info text-dark">Quantity:{{ item.Item_Quantity}}</span> <span class="badge bg-info text-dark" style="margin-left: 15px;"> Price: ${{item.Item_Price}} </span>
            </div>
            </h5></a>
            <hr>
        </div>
    {% endfor %}
{% endblock %}

标签: pythonpython-3.xdjangodjango-modelsdjango-views

解决方案


您应该改写get_context_data。在类上定义total意味着当数据更改时它不会更新它只在应用程序启动时执行一次,您应该在每个请求上执行查询以获取最新数据

class CaseHome(ListView):
    model = CaseItem
    template_name = 'mycase/casehome.html'

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        context['my_total'] = CaseItem.objects.all().aggregate(total=Sum(F('Item_Price')*F('Item_Quantity')))['total']
        return context

推荐阅读