Ввод значения из функции в контекст - PullRequest
0 голосов
/ 03 августа 2020

Добавление разбивки на страницы в мою программу привело к тому, что существующая функция больше не работает должным образом.

Я пробовал это

cart_obj, new_obj = Cart.objects.new_or_get(self.request)
return cart_obj

и это

context['cart'] = cart_obj
return context

Оба раз я получал сообщение об ошибке

имя 'cart_obj' не определено

name 'cart_obj' is not defined введите описание изображения здесь

views.py

class ProductListView(ListView):
    model = Product
    template_name = "products/list.html"
    # added for pagination
    context_object_name='object_list' #Default: object_list
    # print(context_object_name)
    # paginate_by = 3

    def get_context_data(self, *args, **kwargs):
        context = super(ProductListView, self).get_context_data(*args, **kwargs)
        cart_obj, new_obj = Cart.objects.new_or_get(self.request)
        context['cart'] = cart_obj
        return context
        print("context")
        print(context)

    def get_queryset(self, *args, **kwargs):
        request = self.request
        return Product.objects.all()
    
    def get(self, request):
        paginate_by = request.GET.get('paginate_by',6) or 4
        data = self.model.objects.all()
        paginator = Paginator(data, paginate_by)
        page = request.GET.get('page')
       
        try:
            paginated = paginator.page(page)
        except PageNotAnInteger:
            paginated = paginator.page(1)
        except EmptyPage:
            paginated = paginator.page(paginator.num_pages)

        return render(request, self.template_name, {'DataPaginated':paginated, 'paginate_by':paginate_by, 'cart':cart_obj})

Я пытаюсь найти способ поместить значение cart_obj в cart.

1 Ответ

0 голосов
/ 03 августа 2020

ваш cart_obj не определен в ваших методах получения, вам нужно получить контекст до

def get_context_data(self, *args, **kwargs):
        context = super(ProductListView, self).get_context_data(*args, **kwargs)
        cart_obj, new_obj = Cart.objects.new_or_get(self.request)
        context['cart'] = cart_obj
        return context

def get(self, request):
        context = self.get_context_data() # get context
        paginate_by = request.GET.get('paginate_by',6) or 4
        data = self.model.objects.all()
        paginator = Paginator(data, paginate_by)
        page = request.GET.get('page')
       
        try:
            paginated = paginator.page(page)
        except PageNotAnInteger:
            paginated = paginator.page(1)
        except EmptyPage:
            paginated = paginator.page(paginator.num_pages)

         context['DataPaginated'] = paginated
         context['paginate_by'] = paginate_by

        return render(request, self.template_name, context)
...