gpt4 book ai didi

python - Ajax 重定向后 Django View 不呈现

转载 作者:行者123 更新时间:2023-11-28 19:42:57 25 4
gpt4 key购买 nike

我网站的主页顶部有多个按钮。每当这些按钮中的一个被按下时,一个获取请求就会被发送到一个 django View ,它被重定向并且 django 模型的查询集被过滤并最终显示在网页上。我知道我的 ajax 有效,因为终端显示请求已正确重定向。它重定向到的函数似乎也可以正常工作,因为它非常简单并且没有抛出任何错误。但是,我的观点保持不变,我不确定为什么。

网址.py

url(r'ajax_filter/', views.ajax_filter, name='ajax_filter'),
url(r'filter=(\w+)/$', views.filtered_index, name='filtered_index'),

View .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 中,您使用完成(或成功)函数从传回的 JsonResponse 中获取 URL,并使用 window.location.href 重定向到该 URL:

$.ajax({
// You send your request here
}).done(function (data) {
if (data.success) {
window.location.href = data.url;
}
});

关于python - Ajax 重定向后 Django View 不呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41273295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com