Django重定向:没有错误,但没有重定向[重复]

Posted

技术标签:

【中文标题】Django重定向:没有错误,但没有重定向[重复]【英文标题】:Django Redirect: No errors, but no redirect [duplicate] 【发布时间】:2021-07-28 13:22:27 【问题描述】:

POST 一些数据通过 html 表单使用 AJAX 修改我的数据库中的数据。通过在数据库上执行存储过程成功地修改了数据。 view.py 函数调用的最后一行是return redirect('Home')

重定向成功执行,但我没有被重定向。我可以通过在 AJAX 调用的成功函数中添加 window.location.href = 'http://127.0.0.1:8000/ 来克服这个问题。问题是,我想使用messages.success(request, 'Data Successfully Updated'),它只在刷新 AJAX 发起的重定向后才会出现。

return redirect('Home') 在这里不起作用是否有原因,有没有办法克服这个问题?

Home 是我在urls.py 中的路径名称

[06/May/2021 17:23:52] "POST /search/ HTTP/1.1" 302 0   // submitting changes to database
[06/May/2021 17:23:55] "GET / HTTP/1.1" 200 4750        // The page I am intending to redirect to

Ajax 调用

function updateCards()
    ajaxUpdCard().done()
    function ajaxUpdCard() 
        return $.ajax(
            type: 'POST',
            url: '',
            data: csrfmiddlewaretoken: window.CSRF_TOKEN, Action: 'Card', CardID: $('#currentCardID').val(),
                BCard: $('#sr-bad_card').val(), CNum: $('#sr-card_number').val(), CPin: $('#sr-pin_number').val(),
                Bal: $('#sr-balance').val()
        )
    

views.py

        if request.method == 'POST' and request.POST['Action'] == 'Card':
            cardID = request.POST['CardID']
            Bcard = int(request.POST['BCard'])
            CNum = int(request.POST['CNum'])
            CPin = int(request.POST['CPin']) if request.POST['CPin'] != '' and request.POST['CPin'] != 'XXXX' else 'Null'
            print(CPin)
            Bal = request.POST['Bal']
            update_card_transaction(entityID, userID, cardID, Bcard, CNum, CPin, Bal)
            messages.success(request, 'Data Successfully Updated')
            return redirect('Home')

【问题讨论】:

【参考方案1】:

redirect 将完整路径作为字符串或视图名称作为参数:

if request.method == 'POST' and request.POST['Action'] == 'Card':
                cardID = request.POST['CardID']
                Bcard = int(request.POST['BCard'])
                CNum = int(request.POST['CNum'])
                CPin = int(request.POST['CPin']) if request.POST['CPin'] != '' and request.POST['CPin'] != 'XXXX' else 'Null'
                print(CPin)
                Bal = request.POST['Bal']
                update_card_transaction(entityID, userID, cardID, Bcard, CNum, CPin, Bal)
                messages.success(request, 'Data Successfully Updated')
                return redirect(Home)

或者你可以使用反向:

if request.method == 'POST' and request.POST['Action'] == 'Card':
            cardID = request.POST['CardID']
            Bcard = int(request.POST['BCard'])
            CNum = int(request.POST['CNum'])
            CPin = int(request.POST['CPin']) if request.POST['CPin'] != '' and request.POST['CPin'] != 'XXXX' else 'Null'
            print(CPin)
            Bal = request.POST['Bal']
            update_card_transaction(entityID, userID, cardID, Bcard, CNum, CPin, Bal)
            messages.success(request, 'Data Successfully Updated')
            return redirect(reverse('Home'))

【讨论】:

我试过你的方法,但是没用。 你确定home函数是以大写字母开头的吗? 返回重定向(reverse('home')) 是的,我多次确认网址名称...【参考方案2】:

你应该从后端返回一些数据,然后在你的客户端重定向

views.py

if request.method == 'POST' and request.POST['Action'] == 'Card':
            cardID = request.POST['CardID']
            Bcard = int(request.POST['BCard'])
            CNum = int(request.POST['CNum'])
            CPin = int(request.POST['CPin']) if request.POST['CPin'] != '' and request.POST['CPin'] != 'XXXX' else 'Null'
            print(CPin)
            Bal = request.POST['Bal']
            update_card_transaction(entityID, userID, cardID, Bcard, CNum, CPin, Bal)
            messages.success(request, 'Data Successfully Updated')
            return JsonResponse('foo':'bar')

Ajax 调用

function updateCards() 
    ajaxUpdCard().done()
    function ajaxUpdCard() 
        return $.ajax(
            type: 'POST',
            url: '',
            data: 
                csrfmiddlewaretoken: window.CSRF_TOKEN, Action: 'Card', CardID: $('#currentCardID').val(),
                BCard: $('#sr-bad_card').val(), CNum: $('#sr-card_number').val(), CPin: $('#sr-pin_number').val(),
                Bal: $('#sr-balance').val()
            ,
            success:function(response) 
                window.location.href='/home'
                
            
        )
    

【讨论】:

以上是关于Django重定向:没有错误,但没有重定向[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Django中自动刷新/重定向视图[重复]

Django没有重定向

django:登录后重定向到引用页面[重复]

重定向vs反向django

django HttpResponseRedirect 没有重定向

开始页面上的 Django 注册表单,没有重定向到登录页面