【问题标题】:understand a view script in Django了解 Django 中的视图脚本
【发布时间】: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") 按降序排列项目。 idAutoField 参见 docs.djangoproject.com/en/3.2/topics/db/models/…
  • 在倒数第二行,字典context被分配了一个新键product_list,其值为product_list带有分页器的那个
  • 关于get_context_data(self, **kwargs) - 你可以read这个。

标签: python django


【解决方案1】:

所以,我将尝试向您解释一些事情以及从哪里开始您的学习:

  1. self - 这是对象方法的第一个参数的标准名称。
  2. 在 Python 中,您可以通过两种方式传递可变数量的参数: *args 用于未命名的参数; **kwargs 用于命名参数。当我们事先不知道要向函数传递多少值时,我们使用 *args 和 **kwargs 作为参数。
  3. 默认情况下,QuerySet 返回的结果按照模型 Meta 中的 ordering 选项给出的排序元组排序。您可以使用 order_by 方法在每个 QuerySet 的基础上覆盖它。在您的情况下,这是按 ID 排序。
  4. 标识符 id 会自动添加。
  5. 在此处阅读有关分页的信息https://docs.djangoproject.com/en/3.2/topics/pagination/

【讨论】:

  • 好的,我开始明白了……但是为什么要打印页码?最后一个问题......传递给 HomeView 的参数是 TemplateView,它服务于基类并使其成为模板......而 EcoMixin 它是干什么用的?
  • 1. EcoMixin - 这是一个需要从某个地方导入的参数。在我看来,您采用了一些代码示例并试图对其进行解析。您应该从简单的事情开始,并首先参考 django 文档。一切都在那里拆解到最小的细节。 2. print(page_number) 如果你认为这一行在这段代码中是阶乘的,这个例子没有任何语义意义。
  • docs.djangoproject.com/en/3.2 django 文档。它将帮助您了解基础知识和复杂事物。
猜你喜欢
  • 2016-04-06
  • 2015-04-30
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多