我网站的主页顶部有多个按钮。只要按下这些按钮之一,就会将获取请求发送到django视图,该视图将被重定向,并过滤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('')
您不能在您的情况下使用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中,您可以使用done(或成功)函数从传递回来的URL中获取URL,JsonResponse然后使用window.location.href以下命令将其重定向到该URL :
JsonResponse
window.location.href
$.ajax({ // You send your request here }).done(function (data) { if (data.success) { window.location.href = data.url; } });