【问题标题】:How to get my image gallery into my product.html in Django with Class based view DetailView如何使用基于类的视图 DetailView 在 Django 中将我的图片库放入我的 product.html
【发布时间】:2020-12-20 11:48:36
【问题描述】:

我正在使用模型产品和图像。我的目标是在我的单个项目页面中显示来自模型“图像”的项目相关图片库

如何更改以下代码以按项目 slug 过滤并仅显示特定于 slug 的画廊。

物品类别

class Item(models.Model):
    title = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    image = models.ImageField(, upload_to='catalog/images/', blank=True)
    slug = models.SlugField()

图像类

class Images(models.Model):
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    title = models.CharField(blank=True, max_length=50)
    image = models.ImageField(upload_to='catalog/images/', blank=True)

产品详情视图

class ProductDetailView(DetailView):
    model = Item
    template_name = 'product.html'
    context_object_name = 'item'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['image_gallery'] = Images.objects.all()
        return context

product.html 页面

<div class="row wow fadeIn">
        
        {% for img in image_gallery %}
          
        <div class="col-lg-4 col-md-12 mb-4">
          
          <img src="{{img.image.url}}" class="img-fluid" alt="">
          
        </div>

【问题讨论】:

  • context['image_gallery'] = Images.objects.all().filter(pk=self.object.pk)
  • @Crosby 此解决方案仅在图库中显示 1 张图片。在数据库中,该产品有 3 张图片。我正在使用蛞蝓。如何确保所有 3 张图片都显示在图库中?
  • context['image_gallery'] = Images.objects.filter(item=self.object) 我认为应该可以吗?
  • @Brioproject 我写它作为答案。你能验证它吗?谢谢。

标签: django detailview


【解决方案1】:

你可以用self.object访问图片的实例,然后你只需要用外键关系过滤你想要传递给视图的图片。

class ProductDetailView(DetailView):
    model = Item
    template_name = 'product.html'
    context_object_name = 'item'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['image_gallery'] = Images.objects.filter(item=self.object)
        return context

【讨论】:

    【解决方案2】:

    你需要使用 .filter() 而不是 .get()

    image = Images.objects.all()
    image.image will give you the image
    

    这是 Django 3,您需要将其转换为您正在使用的任何版本

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2013-03-25
      • 1970-01-01
      • 2019-08-29
      • 2021-02-04
      • 2018-03-05
      • 1970-01-01
      • 2012-12-31
      • 2021-01-24
      相关资源
      最近更新 更多