python - 遍历模板内的元组返回空值

标签 python django django-templates

我正在尝试将元组解析为模板,但在循环遍历模板内的元组时遇到问题。我只是得到空值。我想这样做是为了使用 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/

相关文章:

python - 适用于特定数据集的最高/最低温度的python hadoop代码

python - 构建时如何强制 python 轮子特定于平台?

python - 使用梯度下降算法进行线性回归,得到意想不到的结果

选项中的 django-rest-framework 文档 API

python - Model.save() 和 ModelForm.save() 一起工作

javascript - 强制元素具有相同的边界(单独的内联 block / float :left; clear:right doesn't work)

html - 如何在 Django 模板中生成换行符

python - 如何加速 LabelEncoder 将分类变量重新编码为整数

django - SQLite3 ".tables"什么也不返回

Django 模板 : Best practice for translating text block with HTML in it