【问题标题】:Django show only one elementDjango 只显示一个元素
【发布时间】:2017-06-29 00:08:22
【问题描述】:

我有带图片的产品,但是当我尝试只显示图片时,django 会向我展示所有图片产品,我该如何解决?我尝试 wite slice 不起作用,因为如果我这样做 |slice:"0:1" 显示图像但不显示此产品。

class Product(models.Model):
    category = models.ForeignKey(Category, related_name='product')
    name = models.CharField(max_length=200, db_index=True)
    slug = models.SlugField(max_length=200, db_index=True)
    image = models.ImageField(upload_to='product/%Y/%m/%d',
                              blank=True)
    description = models.TextField(blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    stock = models.PositiveIntegerField()
    available = models.BooleanField(default=True)
    promo = models.BooleanField(default=False)
    news = models.BooleanField(default=True)
    section = models.CharField(max_length=50, choices=SECTION_CHOICES, default=None)
    detailimage = models.ImageField(upload_to='product/detail/%Y/%m/%d',
                                    blank=True)
    detailimagetwo = models.ImageField(upload_to='product/detail/%Y/%m/%d',
                                    blank=True)
 class Meta:
        ordering = ('name',)
        index_together = (('id', 'slug'),)

 def __str__(self):
    return self.name

 @property
 def image_url(self):
    if self.image and hasattr(self.image, 'url'):
        return self.image.url

 @property
 def detail_url(self):
    if self.detailimage and hasattr(self.detailimage, 'url'):
        return self.detailimage.url

 @property
 def detailtwo_url(self):
    if self.detailimagetwo and hasattr(self.detailimagetwo, 'url'):
        return self.detailimagetwo.url

 def get_absolute_url(self):
    return reverse('shop:product_detail',
                   args=[self.id, self.slug])

我的意见.py

def product_detail(request, id, slug):
    product = get_object_or_404(Product,
                                id=id,
                                slug=slug,
                                available=True)
    products = Product.objects.all()

    return render(request,
                  'shop/product/detail.html',
                  {'product': product,
                   'products': products})

还有我的 detail.html

{% extends "shop/base.html" %}
{% load static %}

{% block title %}{{ product.name }}{% endblock %}
{% block content %}
{% for p in products %}
    <img src="{{p.detail_url}}" class="img-responsive">
    {% endfor %}
  </div>
</div>
{% endblock %}

如果你想要更多评论,我会以多快的速度添加它。

【问题讨论】:

  • 您只想显示一种产品?因为您正在循环所有产品。您是否从其他地方复制了此代码?
  • 不,我创建它。我完成了。 Mby很简单,但我不知道怎么做
  • 嗯,很难理解你的英语,你的问题是什么,你的母语是什么?也许里面有stackoverflow的版本

标签: django-models django-templates django-views


【解决方案1】:

改变你的看法

def product_detail(request, id, slug):
    product = get_object_or_404(Product,
                                id=id,
                                slug=slug,
                                available=True)

    return render(request,
                  'shop/product/detail.html',
                  {'product': product})

并在模板更改中

{% for p in products %}

{% for p in product %}

你可以通过删除模板中的's'来解决这个问题,但我建议改变视图功能

如果您使用 Pillow 不仅仅是图像的地址作为字符串更改此

{{p.detail_url}}

{{p.fieldname.url}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2020-10-13
    • 2016-12-31
    相关资源
    最近更新 更多