Django上下文变量在哪里?

2024-05-29 11:04:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我仍然习惯于基于类的视图,虽然我有了一般的用途,但有些事情还是无法理解。我遵循的是一个教程,它基本上引导你完成动作,但往往忽略了模糊的细节,比如这段代码:

class LoanedBooksByUserListView(LoginRequiredMixin,generic.ListView):
    """Generic class-based view listing books on loan to current user."""
    model = BookInstance
    template_name ='books/bookinstance_list_borrowed_user.html'
    paginate_by = 1

    def get_queryset(self):
        return BookInstance.objects.filter(
            borrower=self.request.user
        ).filter(status__exact='o').order_by('due_back')

我得到模型、模板名和分页,它们是ListView类的属性,但我没有得到的是get_queryset部分,它在哪里执行?如下面的代码所示,它被称为“无处”。它回到哪里去了?我想我的第一个问题可以归结为“基于类的视图中的函数做什么?”在

^{2}$

所以,有两个问题,第一,getqueryset回到了哪里,第二,是什么 书柜清单?它不是一个上下文变量,但似乎是被突然使用的,为什么这个变量是可用的?在


Tags: 代码self视图getby教程filterbooks
1条回答
网友
1楼 · 发布于 2024-05-29 11:04:59

基于类的视图调用get_queryset()在视图的get()方法中,我将展示一些来自django1.11的示例代码。在

# django/views/generic/list.py:159
def get(self, request, *args, **kwargs):
    self.object_list = self.get_queryset()
    allow_empty = self.get_allow_empty()

    ...

    context = self.get_context_data()
    return self.render_to_response(context)

此方法中的ListView类设置self.object_list = self.get_queryset(),但是这并不能解释它在传递给模板的上下文中的何处设置它。如果我们快速浏览一下get_context_data()

^{pr2}$

context被分配了一个带有'object_list': queryset的字典,因此当您试图访问模板中get_queryset中的QuerySet时,您应该访问object_list。在

关于基于类的泛型视图的Django文档中有一节介绍如何使用附加信息扩展上下文数据。https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-display/#dynamic-filtering

相关问题 更多 >

    热门问题