簡體   English   中英

如何在 Django 的兩個視圖之間傳遞兩個 arguments?

[英]How to pass two arguments between two views in Django?

我正在將 Flask 項目轉換為 Django 項目。 我有一個 view1 function 接受用戶輸入並將其傳遞給返回兩個變量的函數 1。 變量 x 用於查詢字符串並傳遞給 view2。 但是,我還需要將變量 y 傳遞給 view2 以進行進一步的操作。 我在 Flask 應用程序中使用了表達式“全局 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)

全局也不會在 Flask 中工作:它可能在有限的開發環境中出現,但在生產中肯定會失敗。 在 web 服務器等多進程、多用戶環境中,您無法安全地在請求之間共享全局數據。

如果您不想要 URL 中的數據,則需要將其保存在某個持久性位置。 在這種情況下,session 將是完美的選擇。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM