Django 中的额外上下文 generic.listview

extra context in django generic.listview

所以我有两个模型:Car 和 Picture。一辆汽车可能有多张图片。

现在我想使用列表视图来显示所有汽车以及每辆汽车的一张图片,有人可以告诉我该怎么做吗? 下面是我的代码

# models.py
class Car(models.Model):
  name = models.CharField(max_length=100)
class Picture(models.Model):
  car = models.ForeignKey(Car,related_name='pictures')
  picture = models.ImageField()

# views.py
class CarList(ListView):
  model = Car

您可以在模板中使用 car.pictures.all 直接访问每个 Car 对象的相关 Picture 对象。

所以你可以做类似的事情,

{% for car in objects %}
    {{ car.name }}
    {% if car.pictures.all %}<img src="{{ car.pictures.all.0.picture.url }}" />{%endif %}
{% endfor %}

有关详细信息,请阅读 Related Objects

列表视图有一个方法 get_context_data。您可以覆盖它以将额外的上下文发送到模板中。

def get_context_data(self,**kwargs):
    context = super(CarList,self).get_context_data(**kwargs)
    context['picture'] = Picture.objects.filter(your_condition)
    return context

然后,在您的模板中,您可以根据需要访问 picture 对象。

我想这应该可以解决您的问题。

因为我想用查询集传递表单,所以下面对我有用。

def get_queryset(self):
    return Men.objects.filter(your condition)

def get_context_data(self,**kwargs):
    context = super(Viewname,self).get_context_data(**kwargs)
    context['price_form']=PriceForm(self.request.GET or None)
    return context

使用 get_queryset() 您可以定义一个基础查询集,它将由 get_context_data() 在 super() 中实现。