首先,我希望两个视图使用完全相同的URL,因为我不想让我的URLConf更复杂。我想要GET和POST的单独视图,以使我的代码更清晰。代码是这样的:
def view2 (request):
# handle POST request, possibly a ajax one
return HTTPRESPONSE(json_data, mimetype="Application/JSON")
def view1 (request):
if method == POST:
view2(request)
# What should I return here???
else:
# handle GET
return render(request, template, context)
我的问题是关于# What should I return here???
行。如果我没有返回那里,则会发生错误:
不返回http响应
但我已在view2中返回HTTP响应。我怎样才能做到这一点?
答案 0 :(得分:6)
另一种可能更简洁的方法是使用class-based views
from django.views.generic import TemplateView
class View1(TemplateView):
def get(self, request, *args, **kwargs):
"""handle get request here"""
def post(self, request, *args, **kwargs):
"""handle post request here"""
def head(self, request, *args, **kwargs):
"""handle head request here. Yes, you can handle any kind of requests, not just get and post"""
当然,您可以添加常用方法__init__
(除非您确定自己在做什么,否则无用),应用login_required
(请参阅this SO question)以及几乎所有内容使用django视图(例如应用中间件,权限等)和 python类(例如继承,元类/装饰器等)
此外,Django还有一大堆基于通用类的视图,用于解决列表页面,详细信息页面,编辑页面等常见情况。
答案 1 :(得分:4)
您需要返回view2的结果:
def view1 (request):
if request.method == 'POST':
return view2(request)
else:
# handle GET
return render(request, template, context)