Как я могу получить 'pk' или 'id' в get_context_data из ListView

Как получить 'pk' или 'id' в get_context_data из ListView

class AllListView(ListView):
    context_object_name = 'all_products'
    queryset = Product.objects.all
    template_name = 'jewelry_store/home.html'

    def get_context_data(self,**kwargs):
        context = super(AllListView,self).get_context_data(**kwargs)
        context['collections'] =  Collection.objects.all
        context['products'] = self.queryset
        context['cool'] = Collection.objects.filter(pk=self.kwargs.get('pk'))

на выходе получается пустой набор запросов enter image description here

в урлах

path('', views.AllListView.as_view(), name='all_products')
``

Ваш путь не имеет параметра URL pk, поэтому self.kwargs.get('pk') будет None и, таким образом, не будет соответствовать элементу.

Вы должны закодировать первичный ключ в URL, например:

path('<int:pk>/', views.AllListView.as_view(), name='all_products')

и в ListView, то вы действительно можете извлечь соответствующие Collection:

from django.shortcuts import get_object_or_404

class AllListView(ListView):
    queryset = Product.objects.all()
    template_name = 'jewelry_store/home.html'
    context_object_name = 'products'

    def get_context_data(self,**kwargs):
        context = super().get_context_data(**kwargs)
        context['collections'] =  Collection.objects.all()
        context['cool'] = get_object_or_404(Collection, pk=self.kwargs['pk'])
        return context
Вернуться на верх