我一直在寻找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})
有人可以帮忙吗?感谢。
答案 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
内部调用该视图