Как передать два аргумента между двумя взглядами в Django? - PullRequest
0 голосов
/ 31 октября 2019

Я превращаю проект Flask в проект Django. У меня есть функция view1, которая принимает пользовательский ввод и передает его в функцию1, которая возвращает две переменные. Переменная 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)

1 Ответ

0 голосов
/ 31 октября 2019

Глобальное не работало бы и в Flask: 1002 * могло бы показаться работающим в ограниченной среде разработки, но, безусловно, не работало бы. Вы не можете безопасно обмениваться глобальными данными между запросами в многопроцессорной, многопользовательской среде, такой как веб-сервер.

Если вы не хотите, чтобы данные в URL-адресе, вам необходимосохраните это где-нибудь постоянное. В этом случае сессия будет идеальным местом.

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

def view2(request, x)
    y = request.session.pop('y', None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...