我的“视图”代码在其代码中有明显的重复。有没有办法重构“返回”代码?
def form_contractor_view(request):
if request.method == 'POST':
form = ContractorForm(request.POST)
if form.is_valid():
form.save()
return redirect('index_view')
else:
return render_to_response(
'form_contractor.html',
{'form': form},
context_instance=RequestContext(request),
)
else:
form = ContractorForm()
return render_to_response(
'form_contractor.html',
{'form': form},
context_instance=RequestContext(request),
)
答案 0 :(得分:2)
根本不需要第一个其他人。将最终渲染移回缩进,这将捕获else的情况。请注意,这是文档中明确描述的模式。
另外,请使用render
代替render_to_response
。
def form_contractor_view(request):
if request.method == 'POST':
form = ContractorForm(request.POST)
if form.is_valid():
form.save()
return redirect('index_view')
else:
form = ContractorForm()
return render(
request,
'form_contractor.html',
{'form': form},
)
答案 1 :(得分:0)
我会尝试:
def form_contractor_view(request):
form = ContractorForm(request.POST or None)
if form.is_valid():
form.save()
return redirect(reverse('index_view')) # <-- you forgot reverse() here
return render(
request,
'form_contractor.html',
{'form': form}
)
我将render_to_response
替换为render
,它执行相同的操作 - 您只需键入较少...尝试懒惰;)
我认为,这很有效。虽然没经过测试如果请求未在POST中完成,则is_valid()
会返回False
,将form
再次作为None
返回,这是有道理的。对于请求在POST中完成并且其中包含无效值的情况,然后else
启动并返回带有错误消息的表单...我认为,这可行..请测试