这是我的模型。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元素的属性。
您的视图应通过上下文发送产品
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 %}
将循环放到视图函数中,然后在下面尝试类似的操作。无需遍历视图中的每个对象-您的查询已检索到所有内容,并且当您将其作为上下文传递给模板时,该模板可用。使用模板语言访问每个对象的属性。
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在我的示例中将呈现出奇怪的外观,但是您可以看到发生了什么。
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 %}