【问题标题】:Django Redirect: No errors, but no redirect [duplicate]Django重定向:没有错误,但没有重定向[重复]
【发布时间】: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')

【问题讨论】:

    标签: python django


    【解决方案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'
                    
                }
            })
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 2018-05-04
      • 2014-08-08
      相关资源
      最近更新 更多