首页 > 解决方案 > Django Listview 类方法

问题描述

在 django >2 .0 中有 Handler 类 ListView

我的代码:

from django.urls import path
from . import views 

urlpatterns = [
    # post views
    path('', views.post_list, name='post_list'),
    # path('', views.PostListView.as_view(), name='post_list'),

在源代码django中:

 @classonlymethod
    def as_view(cls, **initkwargs):
        """Main entry point for a request-response process."""
        ...........

        def view(request, *args, **kwargs):
            self = cls(**initkwargs)
          ...........................
        update_wrapper(view, cls.dispatch, assigned=())
        return view

views.post_list - 模块视图中的简单函数

views.PostListView.as_view() - 模块(views)-> 从 ListView(PostList) 继承的类-> 从 ListView 继承的类方法 - as_view()

为什么用括号写?

标签: pythondjango

解决方案


为什么用括号写?

因为MyListView.as_view不会处理请求事实上,这个函数将返回view函数,而 view函数就是将充当视图处理程序的函数。

.as_view()进行一些检查,例如您没有将getpost参数传递给.as_view等。

当一个请求被触发时,视图将被执行,这将构造一个ListView带有 的对象,然后cls(**initkwargs)调用.setup(request, args, kwargs)设置request和对象,最终用于让类视图处理请求,并返回 HTTP 响应。argskwargs.dispatch(request, *args, **kwargs)


推荐阅读