我正在尝试将单个网址用于两个视图。我在django官方文档中找到了一个示例。我有这样的东西:
class DetailOrderView(View):
"""Combines form and detail parts into one and in darkness binds
them."""
# import pdb; pdb.set_trace()
def get(self, request, *args, **kwargs):
view = DisplayDetailOrderView.as_view()
return view(self, *args, **kwargs)
def post(self, request, *args, **kwargs):
view = FormDetailOrderView.as_view()
return view(self, *args, **kwargs)
在urls.py中,我指的是DetailOrderView.as_view()
但是,当我尝试运行此命令时,出现此错误:
.... lib/python3.6/site-packages/django/views/generic/base.py", line 84, in dispatch
if request.method.lower() in self.http_method_names:
AttributeError: 'DetailOrderView' object has no attribute 'method'
这基本上意味着dispatch(self, request, *args, **kwargs)
尝试调用request.method.lower()
时会发现该请求没有属性method
!哪一个有点奇怪?
请求应该在as_view()
中定义吗?
这是官方文档中的大部分c / p,它应该可以工作,所以我必须做一些愚蠢的事情。
答案 0 :(得分:1)
您是正确的,首先需要使用.as_view()
,但是您打电话给view
以self
作为第一个参数。 view
函数的第一个参数是请求,因此:
class DetailOrderView(View):
"""Combines form and detail parts into one and in darkness binds
them."""
def get(self, request, *args, **kwargs):
view = DisplayDetailOrderView.as_view()
return view(request, *args, **kwargs) # no self
def post(self, request, *args, **kwargs):
view = FormDetailOrderView.as_view()
return view(request, *args, **kwargs) # no self
请注意,这仍然可能会出错,因为例如如果DisplayDetailOrderView
具有其他URL参数,则该视图可能无法正确处理数据。
尽管从技术上来说可以调用另一种视图,但这并不是很常见。