【发布时间】:2021-09-08 10:41:47
【问题描述】:
大家好,我开始了解 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 and kwargs”是什么。
然后通过调用“super().Get_context_data(** kwargs)”将额外元素添加到模型中。
然后所有出现的产品都被拿走并订购“all_products = Product.objects.all(). Order_by("-id")”。
这里我不明白“order_by("-id")"”。在“产品”表中没有名为 id 的字段。
Paginator 带有一个对象列表以及您希望在每个页面上拥有的元素数量。
然后用get方法请求页码并打印出来。 (为什么要打印?)
“product_list = paginator.get_page(page_number)”,返回product_list中的特定产品页面。
我不明白倒数第二行做了什么。
【问题讨论】:
-
self是该类的实例。你可以print(kwargs)看看里面有什么。order_by("-id")按降序排列项目。id是AutoField参见 docs.djangoproject.com/en/3.2/topics/db/models/… -
在倒数第二行,字典
context被分配了一个新键product_list,其值为product_list带有分页器的那个 -
关于
get_context_data(self, **kwargs)- 你可以read这个。