small drf docs bootstrap based python django django-views python-2.x django-pagination

python - drf - pagination xs



La paginaciĆ³n no acepta dict como datos-tipo inigualable (1)

Intento usar Pagination Docs de Django. Pero estoy recibiendo este error:

TypeError at / unhashable type

Lo cual es básicamente porque estoy usando un diccionario como mi objeto y no como un conjunto de preguntas. Me gustaría saber si hay una manera de convertir mi diccionario en un objeto que se pueda usar.

Esta es mi frase en la plantilla:

{% for key, values in prodmatrix.items %} <li class="span3"> <div class="product-box"> <span class="sale_tag"></span> <p><a href="{% url ''product_detail'' slug=values.3.0 %}"><img src="{{ STATIC_URL }}{{values.1.0}}" alt="" /></a></p> <a href="{% url ''product_detail'' slug=values.3.0 %}" class="title"><h4>{{ values.0.0 }}</h4></a><br/> <p class="category"><a href="{% url ''product_detail'' slug=values.3.0 %}">{{values.2.}} {{values.2.1}} {{values.2.2}}</a></p> </div> </li> {% endfor %}

Esta es mi opinión:

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 paginator = Paginator(prodmatrix, 2) page = request.GET.get(''page'') try: prodmatrix2 = paginator.page(page) except PageNotAnInteger: prodmatrix2 = paginator.page(1) except EmptyPage: prodmatrix2 = paginator.page(paginator.num_page) return render(request, ''home.html'',{''prodmatrix2'':prodmatrix})


Usa tuple lugar de dict , así:

# convert `dict` to `tuple`: prodmatrix = tuple(prodmatrix) paginator = Paginator(prodmatrix, 2) # or this paginator = Paginator(prodmatrix.items(), 2) page = request.GET.get(''page'') try: prodmatrix2 = paginator.page(page) except PageNotAnInteger: prodmatrix2 = paginator.page(1) except EmptyPage: prodmatrix2 = paginator.page(paginator.num_page) return render(request, ''home.html'',{''prodmatrix2'':prodmatrix})

Y en tu plantilla, necesitas llamar a los atributos y al método por índice de tupla (clave = 0, valor = 1)