python - 如何在 Django 中的两个视图之间传递两个参数?
问题描述
我正在将 Flask 项目转换为 Django 项目。我有一个 view1 函数,它接受用户输入并将其传递给返回两个变量的 function1。变量 x 用于查询字符串并传递给 view2。但是,我还需要将变量 y 传递给 view2 以进行进一步的操作。我在 Flask 应用程序中使用了表达式“global y”,但这在 Django 中不起作用。有任何想法吗,
def function1(input):
#does something
return x,y
def view1(request):
form = SomeForm()
context={'form': form}
if request.method == "POST":
form = SomeForm(request.POST)
if form.is_valid():
input = form.cleaned_data['data_from_user']
# global y --> works only in Flask
x,y = function1(input)
return redirect("view2", x) # goes to path('<str:x>/', views.my_app, name='view2')
return render(request, "my_app/view1.html", context)
def view2(request, x):
record = SomeTable.objects.filter(y=y).first()
context = {'record': record}
return render(request, "my_app/view2.html", context)
解决方案
global也不会在 Flask 中工作:它可能出现在有限的开发环境中,但在生产中肯定会失败。在多进程、多用户环境(如 Web 服务器)中,您无法安全地在请求之间共享全局数据。
如果您不希望 URL 中的数据,您需要将其保存在某个地方持久。在这种情况下,会议将是一个完美的地方。
def view1(request):
...
x, y = function(input)
request.session['y'] = y
...
def view2(request, x)
y = request.session.pop('y', None)