如何在Django中将列表从一个视图传递到另一个视图?

时间:2014-10-15 03:46:05

标签: python django list django-views

我一直在寻找StackOverflow,但我还没有找到适合我的答案。我对Python和Django比较陌生,所以也许我想错了。

举一个简单的例子,假设两个视图具有不同的关联URL。这不应该是完美的代码。我只是想弄清楚如何从视图1到视图2获取可变长度的项目列表。我没有看到通过URL做到这一点的方法,因为列表可能变化很长。难道这不容易吗?

def view2(request, list_to_process):

     use list_to_process to manufacture formset (e.g. make a formset with one entry for each item in the list)
     return render(request, 'Project/template2.html', {'formset': formset})

def view1(request):

    if request.method == "POST":
        if form.is_valid():
            result = form.cleaned_data
            list_to_process = []
            for item in result:
                list_to_process.append(item)
            *WHAT CODE DO I USE HERE TO CALL VIEW2 AND SEND IT list_to_process AS AN ARGUMENT OR REQUEST ADDITION?*
    else:
        formset = formsettype()
        helper = AssayHelper() (defined elsewhere)
        helper.add_input(Submit("submit", "Submit")
        return render(request, 'Project/template1.html', {'formset': formset, 'helper': helper})

有人可以帮忙吗?感谢。

2 个答案:

答案 0 :(得分:3)

这正是会议的目的。在视图1中:

request.session['list'] = list_to_process

在视图2中:

list_to_process = request.session['list']

答案 1 :(得分:0)

如果您愿意使用session,请使用@Daniel给出的答案,

但是在你的情况下,似乎你没有使用单独的url,你只需要在同一个url中呈现它但需要该视图的输出,在这种情况下从named paramter的python函数获取帮助像这样 -

def view2(request, list_to_process=None, **kwargs):

     use list_to_process to manufacture formset (e.g. make a formset with one entry for each item in the list)
     return render(request, 'Project/template2.html', {'formset': formset})

def view1(request):

    if request.method == "POST":
        if form.is_valid():
            result = form.cleaned_data
            list_to_process = []
            for item in result:
                list_to_process.append(item)
            return view2(request, list_to_process=list_to_process)
    else:
        .....

使用named parameter的好处是,它们是可选的,因此如果没有提供它们就不会抛出错误,例如,直接从view1内部调用该视图