重定向不工作 django
Redirect not working django
我对 Django URL-重定向有疑问。代码结构如下:
- 反应器视图显示带有元素列表的 HTML 页面。单击其中之一时,将对视图执行 ajax 请求。
- ajax 请求正在调用具有必要信息的另一个视图
- 调用 measurementReactor 并显示有关一个反应器的详细信息。
所有函数都被正确调用,GET 请求已完成但页面未在浏览器中重定向...
urls.py
urlpatterns = [
url(r'^reactors/$', views.reactors, name = 'reactors'),
url(r'^measurements/reactor/$', views.measurementReactor, name='measureReact'),
]
views.py
@login_required
def reactor(request):
if request.method == "POST" and request.is_ajax():
if request.POST.get('type') == "measurement" :
return redirect('/measurements/reactor/?ref='+request.POST.get('id'))
@login_required
def measurementReactor(request):
reactobj = reactor.objects.get(id=request.GET['ref'])
query = measurements.objects.filter(id_reactor=reactobj.id)
return render(request, "measureReact.html",{"query":query})
reactor.js
var table1 = $('#datatable').DataTable();
$('#datatable tbody').on('click', 'tr>th:not(.controls.mdl-data-table__cell--non-numeric)', function () {
var data = $(this).parent().find("[name=pk]").text();
$.ajax({
type : "POST",
data : {'csrfmiddlewaretoken' : csrftoken, 'id':data, 'type':"measurement"},
});
});
[编辑]感谢您的回答,我这样做了并且有效!
#views.py
import json
@login_required
def reactors(request):
if request.POST.get('type') == "measurement" :
data = json.dumps({'url':'/measurements/reactor/?ref='+request.POST.get('id')})
return HttpResponse(data)
#reactor.js
$.ajax({
type : "POST",
data : {'csrfmiddlewaretoken' : csrftoken, 'id':data, 'type':"measurement"},
dataType: 'json',
success: function(data){
window.location.href = data["url"];
}
});
在 ajax 调用中你会得到 json 格式的数据,它不会改变 url,更好的 return url on json 使用 HttpResponse 并从 javascript 代码重定向 url。
@login_required
def reactor(request):
if request.method == "POST" and request.is_ajax():
import josn
if request.POST.get('type') == "measurement" :
data = josn.dump({'url':/measurements/reactor/?ref='+request.POST.get('id')})
return HttpResponse(data)
在 ajax 调用成功方法中,捕获响应并使用 $window
重定向
正如 aman kumar 所建议的那样,您的反应器视图应该 return url
回到 reactor.js 然后使用它重定向到所需的页数:
reactor.js
var table1 = $('#datatable').DataTable();
$('#datatable tbody').on('click', 'tr>th:not(.controls.mdl-data-table__cell--non-numeric)', function () {
var data = $(this).parent().find("[name=pk]").text();
$.ajax({
type : "POST",
data : {'csrfmiddlewaretoken' : csrftoken, 'id':data, 'type':"measurement"},
success: function(data){
window.location.href = data.url;
}
});
});
我对 Django URL-重定向有疑问。代码结构如下:
- 反应器视图显示带有元素列表的 HTML 页面。单击其中之一时,将对视图执行 ajax 请求。
- ajax 请求正在调用具有必要信息的另一个视图
- 调用 measurementReactor 并显示有关一个反应器的详细信息。
所有函数都被正确调用,GET 请求已完成但页面未在浏览器中重定向...
urls.py
urlpatterns = [
url(r'^reactors/$', views.reactors, name = 'reactors'),
url(r'^measurements/reactor/$', views.measurementReactor, name='measureReact'),
]
views.py
@login_required
def reactor(request):
if request.method == "POST" and request.is_ajax():
if request.POST.get('type') == "measurement" :
return redirect('/measurements/reactor/?ref='+request.POST.get('id'))
@login_required
def measurementReactor(request):
reactobj = reactor.objects.get(id=request.GET['ref'])
query = measurements.objects.filter(id_reactor=reactobj.id)
return render(request, "measureReact.html",{"query":query})
reactor.js
var table1 = $('#datatable').DataTable();
$('#datatable tbody').on('click', 'tr>th:not(.controls.mdl-data-table__cell--non-numeric)', function () {
var data = $(this).parent().find("[name=pk]").text();
$.ajax({
type : "POST",
data : {'csrfmiddlewaretoken' : csrftoken, 'id':data, 'type':"measurement"},
});
});
[编辑]感谢您的回答,我这样做了并且有效!
#views.py
import json
@login_required
def reactors(request):
if request.POST.get('type') == "measurement" :
data = json.dumps({'url':'/measurements/reactor/?ref='+request.POST.get('id')})
return HttpResponse(data)
#reactor.js
$.ajax({
type : "POST",
data : {'csrfmiddlewaretoken' : csrftoken, 'id':data, 'type':"measurement"},
dataType: 'json',
success: function(data){
window.location.href = data["url"];
}
});
在 ajax 调用中你会得到 json 格式的数据,它不会改变 url,更好的 return url on json 使用 HttpResponse 并从 javascript 代码重定向 url。
@login_required
def reactor(request):
if request.method == "POST" and request.is_ajax():
import josn
if request.POST.get('type') == "measurement" :
data = josn.dump({'url':/measurements/reactor/?ref='+request.POST.get('id')})
return HttpResponse(data)
在 ajax 调用成功方法中,捕获响应并使用 $window
重定向正如 aman kumar 所建议的那样,您的反应器视图应该 return url
回到 reactor.js 然后使用它重定向到所需的页数:
reactor.js
var table1 = $('#datatable').DataTable();
$('#datatable tbody').on('click', 'tr>th:not(.controls.mdl-data-table__cell--non-numeric)', function () {
var data = $(this).parent().find("[name=pk]").text();
$.ajax({
type : "POST",
data : {'csrfmiddlewaretoken' : csrftoken, 'id':data, 'type':"measurement"},
success: function(data){
window.location.href = data.url;
}
});
});