我正在尝试将元组解析为模板,但在循环遍历模板内的元组时遇到问题。我只是得到空值。我想这样做是为了使用 django 分页,这需要一个可以循环的对象。
这是我创建元组的 View
def home(request):
if request.user.is_authenticated():
print "login"
user = request.user
prods = Product.objects.all()
i = 0
print 'numero de produtos ' + str(len(prods))
prodmatrix = {}
for prod in prods:
# 0 1 2 3
prodmatrix[str(i)] = [[prod.name], [prod.image], [], [prod.slug]]
reviews = Review.objects.filter(product=prod.id) # ^ this is for tags
print str(len(reviews))
if len(reviews) != 0:
for review in reviews:
rev_alltags = review.tag.all()
for tags in rev_alltags[:3]: #
print tags.name
prodmatrix[str(i)][2].append(tags.name) # append only tags
print str(i)
i = i + 1
#prodmatrix = tuple(prodmatrix)
paginator = Paginator(prodmatrix.items(), 2)
page = request.GET.get('page')
try:
prodmatrix = paginator.page(page)
except PageNotAnInteger:
prodmatrix = paginator.page(1)
except EmptyPage:
prodmatrix = paginator.page(paginator.num_page)
return render(request, 'home.html',{'prodmatrix':prodmatrix})
这就是我尝试循环思考模板中的元组的方式:
{% for keys, values in prodmatrix %}
<li class="span3">
<div class="product-box">
{{ values.0.0 }} {{ values.0.3 }} {{ values.1.1 }} {{ values.1.2 }}
</div>
</li>
{% endfor %}
最佳答案
不要费心将字典转换为元组。在 dict 上调用 items
方法以获取可以以这种方式迭代的内容:
{% for keys, values in prodmatrix.items %}
<li class="span3">
<div class="product-box">
{{ values.0.0 }} {{ values.0.3 }} {{ values.1.1 }} {{ values.1.2 }}
</div>
</li>
{% endfor %}
顺便说一句,做这样的事情可能会更简单:
class Product(models.Model):
# ...
@property
def tags(self):
return self.review_set.values_list('tag_set__name', flat=True).distinct()
def home(request):
if request.user.is_authenticated():
products = Product.objects.prefetch_related('review_set__tag_set')
return render(request, 'home.html', {
'products': products,
})
然后你的模板看起来像这样:
{% for product in products %}
<li class="span3">
<img src="{{ product.image.image.url }}"/>
<div class="product-box">
{{ product.name }} -
{{ product.tags|join:', ' }} -
{{ product.slug }}
</div>
</li>
{% endfor %}
关于python - 遍历模板内的元组返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21887196/