Django 在循环{{product.I.product_name}的内部使用时不提供值,但在{{product.0.product_name}时工作正常

Django 在循环{{product.I.product_name}的内部使用时不提供值,但在{{product.0.product_name}时工作正常,django,django-models,django-views,Django,Django Models,Django Views,这是我的模型: class Product(models.Model): product_id = models.AutoField product_name = models.CharField(max_length=200) description = models.CharField(max_length=600) pub_date = models.DateField() image = models.ImageField(upload_to="home/images") views.

这是我的模型:

class Product(models.Model):
product_id = models.AutoField
product_name = models.CharField(max_length=200)
description = models.CharField(max_length=600)
pub_date = models.DateField()
image = models.ImageField(upload_to="home/images")
views.py文件:

循环的HTML部分是:

{% for i in range %}

    <div class="col-md-6 col-lg-4 text-center mt-4 ">
         <div class="card" style="width: 18rem;">
            <img src="..." class="card-img-top" alt="...">
            <div class="card-body">
              <h5 class="card-title">{{product.i.product_name}}</h5>
              <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
              <a href="#" class="btn btn-primary">Go somewhere</a>
            </div>
          </div>
    </div>
    {% endfor %}
问题是,当我键入{{product.I.product_name}时,它没有给出产品名称,但当我给出值而不是我喜欢的{{product.0.product_name}时,它工作了。 我不明白问题出在哪里。

如果您使用产品。那么,您正在查找产品上名为I的属性。这里,i是一个名称,与任何其他属性名称一样,不是变量i

幸运的是,有一种简单的方法可以解决这个问题。实际上,您可以在不使用索引的情况下循环查询集产品。您需要做的只是:

{% for p in product %}
     <h5 class="card-title">{{p.product_name}}</h5>
{% endfor %}
这只是简单一点

我希望这有助于:

编辑:在回答评论中的问题时:


当您执行product.0时,此“工作”的原因是0是一个值而不是属性名,因此它正在查询queryset中的第一个zeroith元素。但是,由于0在循环的每次迭代中都不会改变,因此每次都会得到相同的值,而不是观察到的不同值。

是,它是有效的,但仍然不是它发生的原因,因为当我打印I的值时,它给出了0,1,2,3,这是我实际上想要的,但将相同的I放置在索引位置不起作用,如果你能详细解释,它将非常有帮助,谢谢:@TanmoyBhowmick hiya。很高兴这有帮助。我已经编辑了我的答案,以包括对您上述问题的回答。如果您对回答满意,请将回答标记为“已接受”。谢谢
{% for p in product %}
     <h5 class="card-title">{{p.product_name}}</h5>
{% endfor %}
{% for product in products %}
     <h5 class="card-title">{{product.product_name}}</h5>
{% endfor %}