python - 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()
为什么用括号写?
解决方案
为什么用括号写?
因为MyListView.as_view
不会处理请求。事实上,这个函数将返回该view
函数,而该 view
函数就是将充当视图处理程序的函数。
将.as_view()
进行一些检查,例如您没有将get
或post
参数传递给.as_view
等。
当一个请求被触发时,视图将被执行,这将构造一个ListView
带有 的对象,然后cls(**initkwargs)
调用.setup(request, args, kwargs)
设置request
和对象,最终用于让类视图处理请求,并返回 HTTP 响应。args
kwargs
.dispatch(request, *args, **kwargs)
推荐阅读
- sql - 如何合并select中调用的函数返回的表?
- android - 使用 Mockito 测试 MVP Android 应用程序
- amazon-web-services - 如何通过 CloudFront 缓存的重定向并改为访问 API 网关?
- c++ - 一个错误?一个人口众多的向量
退出循环时,while 语句内的内容意外更改 - android - 哪些广告格式使用火种?
- sql-server - 由于 SQL 查询执行时间过长,在 Win Form Application 中出现异常
- python - 将 2 段合并为 1 段时出现问题
- javascript - 可在非列表元素上选择
- docker - Docker - 没有这样的文件或目录。复制不会复制所有文件
- wavesplatform - 关于使用 WavesCS 生成地址的一般问题