Django 如何打印product.html中的所有产品属性

Django 如何打印product.html中的所有产品属性,django,django-templates,Django,Django Templates,这是我的模特 class Product(models.Model): title = models.CharField(max_length=50) description = models.TextField(blank=True, null=True) price = models.FloatField() summary = models.TextField(blank=False, null=False) image = models.Image

这是我的模特

class Product(models.Model):
    title = models.CharField(max_length=50)
    description = models.TextField(blank=True, null=True)
    price = models.FloatField()
    summary = models.TextField(blank=False, null=False)
    image = models.ImageField(blank=True, null=True)
这是我的Django views.py

def products_view(request,*args, **kwargs):
    print(Product.objects.values())
    myDict = list()
    for product in Product.objects.all():
        my_product = {
        "product_id": product.id,
        "product_title":product.title,
        "product_description":product.description,
        "product_price":product.price,
        "product_summary":product.summary,
        "product_image":product.image
        }
        print(my_product)
    return render(request, "products.html", my_product)
这是myproducts.html

{% extends 'base.html' %}

{% block content %}
<h1>Products Page</h1>

<ul>
{% for product in my_product %}
<div class="card" style="width: 18rem;">
  <img src="{{ product_image }}" class="card-img-top" alt="{{ product_id }}">
  <div class="card-body">
    <h5 class="card-title">{{ product_title }}</h5>
    <p class="card-text">{{ product_description }}</p>
    <a href="/cart" class="btn btn-primary">Add to Basket</a>
  </div>
</div>
{% endfor %}
</ul>

{% endblock %}
{%extends'base.html%}
{%block content%}
产品页
    {my_product%}中的产品为% {{product_title}}

    {{产品描述}

    {%endfor%}
{%endblock%}
My Product.html页面仅显示“h1”标记,不显示产品属性。我怎样才能解决这个问题?
Products.objects.all()为我提供了查询集,我尝试将其更改为dict。但我无法打印dict元素的属性。

您的视图应通过上下文发送产品

def products_view(request,*args, **kwargs):
    products = Product.objects.all()
    context = {'products': products } 
    return render(request, "products.html", context)
也可以在模板中使用

{% for product in products %}
<div class="card" style="width: 18rem;">
  <img src="{{ product.image.url}}" class="card-img-top" alt="{{ product.id}}">
  <div class="card-body">
    <h5 class="card-title">{{ product.title}}</h5>
    <p class="card-text">{{ product.description}}</p>
    <a href="/cart" class="btn btn-primary">Add to Basket</a>
  </div>
</div>
{% endfor %}
{%用于产品中的产品%}
{{product.title}}

{{product.description}

{%endfor%}
在视图函数中删除循环,然后尝试下面的方法。无需循环查看视图中的每个对象-您的查询已检索到所有内容,并且当您将其作为上下文传递时,它对模板可用。使用模板语言访问每个对象的属性

def products_view(request,*args, **kwargs):

    products = Product.objects.all()
    return render(request, "products.html", products)
在HTML中,执行以下操作:

{% for product in products %}

  {{product.title}}
  {{product.description}}
  {{product.price}}
  {{product.summary}}
  {{product.image}}

{% endfor %}


在我的示例中,此HTML将呈现奇怪的效果,但您可以看到发生了什么。

循环的
打印不正确的原因是因为
my_product
不可编辑,因此模板无法在其上循环

您需要将其更改为一个iterable,如列表或查询集

def products_view(request,*args, **kwargs):
    print(Product.objects.values())

    my_product = Product.objects.all()

    print(my_product)
    return render(request, "products.html", {'my_product': my_product})
现在,在模板中,您将能够使用点符号访问产品属性

{% for product in my_product %}
  <div class="card" style="width: 18rem;">
    <img src="{{ product.image }}" class="card-img-top" alt="{{ product.id }}">
    <div class="card-body">
      <h5 class="card-title">{{ product.title }}</h5>
      <p class="card-text">{{ product.description }}</p>
      <a href="/cart" class="btn btn-primary">Add to Basket</a>
    </div>
  </div>
{% endfor %}
{%用于my_product%}
{{product.title}}

{{product.description}

{%endfor%}
它还显示了您对python本身缺乏了解,因为您一直在覆盖my_product dict字段