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字段