我如何在product.html中打印所有产品属性

问题描述 投票:0回答:3

这是我的模型。py

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)

This my products.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 %}

我的Product.html页面仅显示“ h1”标签,不显示产品属性。如何解决这个问题?Products.objects.all()给了我QuerySet,我试图改为dict。但是我无法打印dict元素的属性。

django django-templates
3个回答
1
投票

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

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 %}

0
投票

将循环放到视图函数中,然后在下面尝试类似的操作。无需遍历视图中的每个对象-您的查询已检索到所有内容,并且当您将其作为上下文传递给模板时,该模板可用。使用模板语言访问每个对象的属性。

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在我的示例中将呈现出奇怪的外观,但是您可以看到发生了什么。


0
投票

for loop不能正确打印的原因是因为my_product不可迭代,因此模板无法在其上循环。

您需要将其更改为可迭代的-如列表或查询集。

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 %}
© www.soinside.com 2019 - 2024. All rights reserved.