Понять сценарий представления в Django
Привет, ребята, я начинаю знакомиться с django, в частности с тем, как структурированы представления. У меня есть некоторые неразрешенные сомнения как у любителя. .
Вот, например, у меня есть представление, которое должно показывать все продукты в базе данных на странице.
class HomeView(EcomMixin, TemplateView):
template_name = "home.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
all_products = Product.objects.all().order_by("-id")
paginator = Paginator(all_products, 8)
page_number = self.request.GET.get('page')
print(page_number)
product_list = paginator.get_page(page_number)
context['product_list'] = product_list
return context
"get_context
" возвращает словарь, представляющий контекст модели, но я не понимаю, что такое "self и kwargs".
Затем в модель добавляются дополнительные элементы с вызовом "super().Get_context_data(** kwargs)
."
Затем все присутствующие продукты берутся и заказываются "all_products = Product.objects.all(). Order_by("-id")
".
Здесь я не понимаю, что "order_by("-id")"
. В таблице "Product" нет поля с именем id.
Paginator поставляется со списком объектов, а также с количеством элементов, которые вы хотите иметь на каждой странице.
Затем номер страницы запрашивается методом get и печатается. (Почему он печатается?)
"product_list = paginator.get_page(page_number)
", возвращает определенную страницу продукта в списке продуктов.
Я не понимаю, что сделано в предпоследней строке.
Итак, я попытаюсь объяснить вам некоторые вещи и с чего начать изучение:
- self - это стандартное имя первого аргумента для методов объектов.
- В Python вы можете передавать переменное количество аргументов двумя способами: *args для неименованных аргументов; **kwargs для именованных аргументов. Мы используем *args и **kwargs в качестве аргументов, когда заранее не знаем, сколько значений мы хотим передать функции. .
- По умолчанию результаты, возвращаемые QuerySet, упорядочиваются кортежем упорядочивания, заданным параметром упорядочивания в Meta модели. Вы можете переопределить это на основе каждого QuerySet, используя метод order_by. В вашем случае это сортировка по ID.
- Идентификатор id добавляется автоматически.
- Читайте о пагинации здесь https://docs.djangoproject.com/en/3.2/topics/pagination/