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)