Как передать данные из представления django в другие представления без globall

Итак, я использую платеж, который имеет представление под названием verify, и оно собирается проверить, если результат был Ok, сделать что-то. Но мне нужно передать order_id в предыдущем представлении, который является токеном из url в это представление. некоторые предложили использовать global. но я боюсь ошибки на реальном сервере .

Если вам нужно . Его код :

Предыдущее представление, отправляющее запрос в платежный центр :

def send_request(request , order_id):
i = order_id
amount = get_object_or_404(Order , id = i  , user_id = request.user.id)
result = client.service.PaymentRequest(MERCHANT , amount.total , description , email , mobile , CallbackURL)
if result.Status == 100 :
    return redirect('https://www.zarinpal.com/pg/StarPay' + str(result.Authority))
else :
    return HttpResponse('error code : ' , str(result.Status))

А мне нужен order_id в следующем представлении

SO что я могу сделать?? Помогите пожалуйста!

Передача данных из одного представления в другое может быть выполнена в Django несколькими способами.

Вы можете использовать параметр url :

def present_view(request):
    if condition:
        return reverse('next_view', args(order_id))
    return render(request, 'present_view.html', locals())

def next_view(request, order_id):
    # Retrieve order_id from url parameter
    id = order_id
    # Do some stuff with id here

urls.py

path('present_view/', views.present_view, name=present_view),
path('next_view/<int:order_id>/', views.next_view, name=next_view)

Вы можете использовать сессию :

def present_view(request):
    if condition:
        # Set the id in the session
        request.session['order_id'] = 'some_id_123'
        return reverse('next_view', args(order_id))
    return render(request, 'present_view.html', locals())

def next_view(request, order_id):
    # Retrieve order_id from session, id = 0 if order_id is not found
    id = request.session.get('order_id', 0)
    # Do some stuff with id here

urls.py

path('present_view/', views.present_view, name=present_view),
path('next_view/', views.next_view, name=next_view)
Вернуться на верх