Вообщем ,я новичек в Django. К сути.. Есть сайт(интернет-магазин), на главной странице которого есть его, скажем так, товары. Их можно сортировать по категориям. Так же на главной странице есть пагинация (Нумерация страниц) Что бы не загружать браузер, за 1 раз должно выводиться по 9 товаров. Вопрос : Как правильно настроить пагинацию, что бы учитывать Категорию товара, как правильно получить
products
Накидал примерно
view.py
def productlist(request, category_slug=None):
category = None
categories = Category.objects.all()
products = Product.objects.filter(available=True)
paginator = Paginator(products, 6)
page = request.GET.get('page')
template = 'shop/product/list.html'
if category_slug:
category = get_object_or_404(Category, slug=category_slug)
products = products.filter(category=category)
try:
products = paginator.page(page)
except PageNotAnInteger:
products = paginator.page(1)
except EmptyPage:
products = paginator.page(paginator.num_pages)
context = {
'category': category,
'categories': categories,
'products': products,
'page': page
}
return render(request, template, context)
А вот модель
class Product(models.Model):
category = models.ForeignKey(
Category,
related_name='products',
verbose_name='Категорія'
)
name = models.CharField(
max_length=256,
db_index=True,
verbose_name='Назва'
)
slug = models.SlugField(
max_length=256,
db_index=True
)
image = models.ImageField(
upload_to='prod_img/',
blank=True,
verbose_name='Зображення'
)
desc = models.TextField(
blank=True,
verbose_name='Опис'
)
price = models.DecimalField(
max_digits=10,
decimal_places=2,
verbose_name='Ціна'
)
stock = models.PositiveIntegerField(
verbose_name='Запас'
)
available = models.BooleanField(
default=True,
verbose_name='Наявність'
)
created = models.DateTimeField(
auto_now_add=True,
verbose_name='Створено')
updated = models.DateTimeField(
auto_now=True,
verbose_name='Оновлено')
class Meta:
ordering = ['name']
index_together = [
['id', 'slug']
]
verbose_name = 'Товар'
verbose_name_plural = 'Товари'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('shop:ProductDetail', args=[self.id, self.slug])
Картинка для лучшего понимания