【问题标题】:How to pass two arguments between two views in Django?如何在 Django 中的两个视图之间传递两个参数?
【发布时间】:2019-10-31 17:32:43
【问题描述】:

我正在将一个 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)

【问题讨论】:

  • 我的意思是为什么不将它作为参数添加并传递它?
  • X 和 Y 代表一个名称和对应的代码。 url 必须只包含名称(我猜是美学原因)。

标签: python django django-views


【解决方案1】:

全局也不会在 Flask 中工作:它可能在有限的开发环境中出现,但在生产中肯定会失败。您无法在网络服务器等多进程、多用户环境中的请求之间安全地共享全局数据。

如果您不希望 URL 中的数据,您需要将其保存在某个地方。在这种情况下,会议将是一个完美的地方。

def view1(request):
    ...
    x, y = function(input)
    request.session['y'] = y
    ...

def view2(request, x)
    y = request.session.pop('y', None)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多