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() 中实现。
所以我有两个模型: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() 中实现。