首页 > 解决方案 > Django 将上下文发送到多个视图

问题描述

我正在尝试在 Django 中完成以下任务:

  1. 第一页:用户填写一个大的工作申请表,数据被发送到第二页

  2. 第二页:用户查看他之前填写的数据并进入第三页

  3. 第三页:用户支付金额(来自第二页)并且一旦支付,那么只有所有这些数据被保存到数据库中。

我已经完成了填写表格的第一页工作,然后将该数据发送到第二页。

这是我的意见.py

def applyJob(request,id=None):
        job = get_object_or_404(AddJob, id=id)
        if request.method == 'POST':
            context = {
                'jobName': job.jobName,
                'jobID' :  job.pk,
                'cfName' : request.POST.get('candidateFirstName'),
                'cmName' : request.POST.get('candidateMiddleName'),
                'clName' : request.POST.get('candidateLastName'),
                ......
                return render(request,'reviewAppliedJob.html',context)
        else:
            context ={
                "jobName": job.jobName,
                "id": id,
            }
            return render(request,'applyJob.html',context)

由于我使用 发送上下文数据return render(request,'reviewAppliedJob.html',context),因此 URL 不会更改,因此不会进入我的reviewAppliedJob 视图,因此我无法编写代码进入第三页。

def reviewAppliedJob(request):
    return HttpResponse('done....')

为此,我可以使用HttpResponseRedirect('/reviewAppliedJob')而不是renderin,applyJob()但它不会发送我的上下文数据。Django 允许使用render()、消息框架、url 参数或 session发送上下文。但是由于我有大量数据,我不知道该使用哪一个并且可以完美地工作。

高效、安全地完成这项任务的最佳方法是什么?

提前致谢。

标签: djangopostdjango-formsdjango-templatesdjango-views

解决方案


我建议您改用会话。您可以编写一个,而不是编写三个单独的视图。用户填写数据后,将它们临时保存在带有阶段密钥的会话密钥中。这样,在处理视图时,您可以访问用户的数据和阶段。


推荐阅读