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):
....
如何将此逻辑分开但使用相同的渲染调用?
另外,假设我需要第三次使用另一个附加变量进行渲染,我应该如何解释?
答案 0 :(得分:1)
基于类的视图是一个非常好的选择,但没有理由你不能做类似的事情;
def _render(request, form):
return render(request, 'projects/project_list.html',
{"form": form, 'projects': request.user.project_set.all()})
@login_required
def project_list(request):
projects = request.user.project_set.all()
form = ProjectForm()
return _render(request, form)
@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, form)