project_list() 视图列出了所有已经存在的项目,并为您提供了添加新项目的选项。new_project() 处理该新项目的创建,然后重定向到 project() 视图或返回到 project_list() 包括表单,以便它可以显示错误。
我一直在想我应该以某种方式使用相同的渲染功能。原因是大约一个星期以来,我没有意识到form.is_valid() == False
在页面正确加载但没有列出项目之后(我忘记在第二次渲染中包含项目变量)。
@login_required
def project_list(request):
projects = request.user.project_set.all()
return render(request, 'projects/project_list.html',
{'form': ProjectForm(),'projects': projects})
@login_required
def new_project(request):
form = ProjectForm()
if request.method == 'POST':
form = ProjectForm(data=request.POST)
if form.is_valid():
project = form.save(commit=False) #must specify user before commit
project.owner = request.user
project.save()
return redirect(project)
return render(request, 'projects/project_list.html',
{"form": form, 'projects': request.user.project_set.all()})
def project(request, project_id):
....
如何保持这个逻辑分开但使用相同的渲染调用?
另外,假设我需要用另一个额外的变量来第三次渲染这个,我应该如何解释呢?