Django:基于'as_view()'方法的通用视图

Man*_*edi 7 python django python-2.7 django-1.7

我正在开发一个应用程序,其中我创建了一个泛型ListView.现在,在我定义该视图时urls.py,我从文档中读到了我需要使用该as_view()方法,如下所示:

from django.conf.urls import patterns, include, url
from .views import BlogIndex

urlpatterns = patterns(
    '',
    url(r'^$', BlogIndex.as_view(), name="index"),
)
Run Code Online (Sandbox Code Playgroud)

现在,我真的不明白文档对这个方法的看法.有人能否对这个概念有所了解?

Rah*_*pta 18

在基于类的视图中,您必须调用as_view()函数以便返回一个可调用的视图,该视图接受一个request并且在通用视图的情况下返回response. 它作为请求 - 响应周期中的主要入口点.

as_view是将我的MyView类与其url 连接的函数(类方法).

来自django docs:

classmethod as_view(**initkwargs)
返回一个可调用的视图,该视图接收请求并返回响应:

您不能像在普通的基于函数的视图中那样使用基于类的视图.

BlogIndex(request) # can't do this in case of CBVs
Run Code Online (Sandbox Code Playgroud)

如果您希望CBV正常运行,上述代码无效.为此,您需要提供一个可调用的视图,然后将请求传递给它.例如:

response = MyView.as_view()(request)  # valid way
Run Code Online (Sandbox Code Playgroud)

通过调用as_view()我的视图类上的函数MyView将给我一个视图,我将使用request参数调用以启动请求 - 响应周期.

在你的情况下:

my_callable_view = BlogIndex.as_view() # returns a callable view
<function blog.views.BlogIndex>
Run Code Online (Sandbox Code Playgroud)

现在,调用此函数并传递request.

 response = my_callable_view(request) # generate proper response
Run Code Online (Sandbox Code Playgroud)