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

新手上路,请多包涵

我正在开发一个应用程序,其中我创建了一个通用的 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"),
)

现在,我并不真正理解文档中关于此方法的内容。有人可以阐明这个概念吗?

原文由 Manas Chaturvedi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 685
2 个回答

在基于类的视图中,您必须调用 as_view() 函数,以便返回一个 可调用视图,该视图采用 request 并返回 response. 6e05e1在通用视图的情况下,请求-响应周期中的点。

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

来自 django 文档

类方法 as_view(**initkwargs)

返回接受请求并返回响应的可调用视图:

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

 BlogIndex(request) # can't do this in case of CBVs

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

 response = MyView.as_view()(request)  # valid way

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

在你的情况下:

 my_callable_view = BlogIndex.as_view() # returns a callable view
<function blog.views.BlogIndex>

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

  response = my_callable_view(request) # generate proper response

原文由 Rahul Gupta 发布,翻译遵循 CC BY-SA 3.0 许可协议

视图函数的格式与以前不同,因为:

  1. 这个视图实际上将作为一个类来实现
  2. 我们将从现有的通用视图函数继承,该视图函数已经完成了我们希望该视图函数完成的大部分工作,而不是从头开始编写我们自己的视图函数。
  3. 类方法 as_view() - 这会完成创建类实例的所有工作,并确保为传入的 HTTP 请求调用正确的处理程序方法。

参考: https ://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Generic_views

原文由 Deepak 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题