Я получаю сообщение об ошибке, и я думаю, что это может быть по тем же причинам, что и у Виктора ( объект 'ProductList' не имеет атрибута 'object_list' )
В сообщении Виктора AKS написал -
Вы могли получить ошибку в следующей строке в get_context_data () суперкласса:
queryset = kwargs.pop('object_list', self.object_list)
Метод get BaseListView
устанавливает object_list
в представлении вызывая метод get_queryset
:
self.object_list = self.get_queryset()
Но в вашем случае вы вызываете get_context_data()
в самом методе get_queryset
, и в это время object_list
не установлен в представлении.
Я просмотрел свою трассировку и увидел код, упомянутый AKS.
File "C:\Users\HP\Django Projects\EcommerceProject\products\views.py", line 48, in get_context_data
context = super(ProductListView, self).get_context_data(*args, **kwargs)
File "c:\Users\HP\DJANGO~1\ECOMME~1\lib\site-packages\django\views\generic\list.py", line 131, in get_context_data
queryset = kwargs.pop('object_list', self.object_list)
AttributeError: 'ProductListView' object has no attribute 'object_list'
[03/Aug/2020 18:20:21] "GET /products/ HTTP/1.1" 500 90906
Вот мой код
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)
print("get context data")
# context = {}
context['cart'] = cart_obj
return 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)
# context={}
context = self.get_context_data()
context['DataPaginated'] = paginated
context['paginate_by'] = paginate_by
# return render(request, self.template_name, {'DataPaginated':paginated, 'paginate_by':paginate_by, 'cart':cart_obj})
return render(request, self.template_name, context)
Проблема исправлена
Немного изменил функцию get_context_data
в классе ProductListView(ListView):
def get_context_data(self, *args, **kwargs):
self.object_list = super().get_queryset()
context = super(ProductListView, self).get_context_data(*args, **kwargs)