我网站的主页顶部有多个按钮。每当按下其中一个按钮时,就会向django视图发送一个get请求,该视图被重定向,并且django模型的查询集被过滤并最终显示在网页上。我知道我的ajax有效,因为终端说请求被正确重定向。它重定向的功能似乎也在起作用,因为它非常简单并且没有抛出任何错误。但是,我的看法仍然相同,我不知道为什么。
urls.py
url(r'ajax_filter/', views.ajax_filter, name='ajax_filter'),
url(r'filter=(\w+)/$', views.filtered_index, name='filtered_index'),
views.py
def filtered_index(request, filter):
clothes = Clothes_Item.objects.filter(gender=filter)
if request.user.is_authenticated():
favorite_clothes_ids = get_favorite_clothes_ids(request)
return render(request, 'test.html', {'clothes': clothes, 'favorite_clothes_ids': favorite_clothes_ids})
else:
return render(request, 'test.html', {'clothes': clothes, })
def ajax_filter(request):
if request.is_ajax():
gender_filter = request.GET.get('gender_filter') #filter type
if gender_filter is not None:
return HttpResponseRedirect(reverse('filtered_index', args=[gender_filter]))
return HttpResponse('')
答案 0 :(得分:11)
您不能在您的情况下使用Django重定向。当您发送ajax请求时,通常需要json响应,并且基于此,您可以通过JavaScript代码重定向用户。
$.ajax({
// You send your request here
}).done(function(data) {
// You can handle your redirection here
});
以下是如何使用您的设置处理重定向,您从django传回JsonResponse以及您要访问的下一页:
from django.http import JsonResponse
def ajax_filter(request):
if request.is_ajax():
gender_filter = request.GET.get('gender_filter') #filter type
if gender_filter is not None:
return JsonResponse({
'success': True,
'url': reverse('filtered_index', args=[gender_filter]),
})
return JsonResponse({ 'success': False })
在JS中,您使用完成(或成功)函数从传回的JsonResponse
中获取URL并使用window.location.href
重定向到该URL:
$.ajax({
// You send your request here
}).done(function (data) {
if (data.success) {
window.location.href = data.url;
}
});