【问题标题】:Django pass object from view to next for processingDjango将对象从视图传递到下一个进行处理
【发布时间】:2012-02-19 21:40:24
【问题描述】:

如果您有 2 个视图,第一个使用 modelform 获取用户输入的信息(出生日期、姓名、电话号码等),第二个使用此信息创建表格。

如何将第一个视图中创建的对象传递给下一个视图,以便在第二个视图的模板中使用它

如果您能分享任何帮助,我将不胜感激

【问题讨论】:

    标签: django django-models django-forms django-templates django-views


    【解决方案1】:

    一种方法是在您的第一个视图中将对象放入会话中,然后您可以从第二个视图中的 request.session 中检索该对象。

    def first_view(request):
        my_thing = {'foo' : 'bar'}
        request.session['my_thing'] = my_thing
        return render(request, 'some_template.html')
    
    def second_view(request):
        my_thing = request.session.get('my_thing', None)
        return render(request, 'some_other_template.html', {'my_thing' : my_thing})
    

    【讨论】:

    • 你能澄清一下你的意思吗?也许是相关 Django 文档的链接?我还在学习这些东西谢谢你的回复!
    • 我为您的回答添加了一个示例。
    • 这看起来可能对我有用!最后一个问题,(我很抱歉)..我如何从模板中调用保存的表单?我应该用它们在第一个视图的模板中的名称来称呼它们吗?再次感谢!
    • ps,你的例子中的 my_object = form.save() 在我的问题中......因为我正在保存输入的东西......
    • 什么是我要传递的变量不是JSON可序列化的,例如和实例?
    【解决方案2】:

    使用HttpResponseRedirect 指向带有新创建对象ID 的表视图。这是一个简短的例子:

    def first(request):
        if request.method == 'POST':
              form = MyModelForm(request.POST, request.FILES)
              if form.is_valid():
                   my_model = form.save()
    
                   return HttpResponseRedirect('/second/%s/' % (my_model.pk)) # should actually use reverse here.
          # normal get stuff here
    
    def second(request, my_model_pk):
         my_model = MyModel.objects.get(pk=my_model_pk)
    
         # return your template w/my model in the context and render
    

    【讨论】:

    • 那么你会如何调用这个对象呢?你介意提供一个简短的例子吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 2017-04-26
    • 2016-09-28
    • 2021-12-02
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多