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重定向:没有错误,但没有重定向[重复]的主要内容,如果未能解决你的问题,请参考以下文章