2014-02-19 43 views
1

我想解析一个元组到模板,但我通过模板内的元组循环获取问题。我只是得到空值。我想这样做使用django分页,这需要一个可以循环的对象。循环通过模板内部的元组返回空值

这是我的看法,我创造我的元组

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

回答

2

不要打扰将字典转换为元组。呼吁字典的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 %} 
+0

一个对象,我想d这是因为我试图使用django分页,这需要一个可以循环的对象 –

2

上的字典调用tuple刚返回键的元组。我不确定你为什么这样做,但删除该行可能会起作用。

+0

我想做这个监守我试图使用Django分页,即要求可以循环 –