当前位置: 首页 > 面试题库 >

Django视图在Ajax重定向后未呈现

陆英毅
2023-03-14
问题内容

网站的主页顶部有多个按钮。只要按下这些按钮之一,就会将获取请求发送到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

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


 类似资料:
  • 问题内容: 我使用Django的内置DeleteView,并为属性分配了一个值。现在在我的模板中,我通过JQuery的$ .post()方法触发此视图。删除该项目后,我不会重定向到。经过一番搜索,我发现这似乎是AJAX post方法的问题,它忽略了重定向。 我通过添加一个函数将其设置为JQuery中的第三个参数来修复它。 但是,这种方式似乎不是Django。从本质上讲,它是从AJAX而非Djang

  • 如前所述,控制器通常都会返回一个逻辑视图名,然后视图解析器会把它解析到一个具体的视图技术上去渲染。对于一些可以由Servlet或JSP引擎来处理的视图技术,比如JSP等,这个解析过程通常是由InternalResourceViewResolver和InternalResourceView协作来完成的,而这通常会调用Servlet的APIRequestDispatcher.forward(..)方法

  • 问题内容: 我希望ajax发布上的成功可以转到主页。由于某种原因,我一直做错了。知道我应该怎么做才能解决这个问题吗? 阿贾克斯 问题答案: 希望以上内容对我有所帮助,因为我遇到了同样的问题

  • 我使用Queue发送电子邮件,代码如下: 在控制器部分,我使用send- 我正在使用视图: 现在,当我尝试发送时,收到的电子邮件中没有任何内容。 我已经调试了整个供应商\laravel\framework\src\illighted\Mail\Mailer。php类并发现renderView函数中无法呈现视图。 我还将视图Doctype更改为HTML5,但得到了相同的结果,没有内容。 渲染视图正在

  • 问题内容: 我正在执行以下ajax调用: 这是我的PHP: 创建销售后,我想重定向到addcust.php?New_sale = $ sale_id 我该怎么做? 问题答案: 您成功重定向: 无论您从PHP脚本回显什么,都将在中。因此,echo ,您将获得您的URL。

  • 我正在通过 django 表单向我的 Django Rest Framework API 提交一个 POST 请求。 下面是我的表单的一个片段: < code>views.py: 我正在进行一次成功的POST(项目是在数据库中创建的),但是一旦保存,我就会转到url,它显示了我的api w/Markdown。我想让它返回到特定的url。 有没有办法自定义成功后重定向到的位置? 添加序列化器: