如果查询匹配,则使用 Django 在 Ajax 调用后重定向

Posted

技术标签:

【中文标题】如果查询匹配,则使用 Django 在 Ajax 调用后重定向【英文标题】:Redirect After Ajax call using Django if query's match 【发布时间】:2019-07-13 07:47:05 【问题描述】:

我知道此代码无法正常工作,因为请求不充分,但我不确定如何纠正它。我正在尝试对其进行配置,以便如果 ajax 数据与用户名匹配,它将重定向到 home.html。任何帮助都会非常珍惜! (PS:打印调用正在工作 - 如果用户存在,它会打印“else”语句,反之亦然。尽管如此,重定向仍然不起作用!)

views.py

 def profile(request):
        profname = request.GET.get('profname', None)
        obj = User.objects.filter(username=profname)
        if not obj:
            print("I need this time to redirect to error page")

        else:
            print ("I need this to redirect home")
            return redirect('home')
        return render(request, 'profile.html')

html

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<body>
<h1>jkkk</h1>
     <a id="butt" href="#">Get Data</a>
 </body>
 <script>


$(document).ready(function()
  $("#butt").click(function()

           $.ajax(
           type: "get",
           url: 'profile',
           datatype:'json',
            data: 
            'profname': 'jillsmith',
            ,

       ); 
  );
);
</script>

urls.py

urlpatterns = [
     path('', views.explore, name='explore'),
     path('happening/profile/', views.profile, name='profile'),
     path('happening/', views.happening, name='happening'),
     path('home/', views.home, name='home'),
     path('happening/test/', views.test, name='test'),
     path('home/likes/', views.likes, name='likes'),



]

【问题讨论】:

通过从 Ajax 请求返回重定向响应,您不会在前端获得重定向。这根本不是 Ajax 的工作方式。此外,无论响应是什么,您都没有对响应做任何事情,因为您没有 success 回调。 我该如何解决这个问题? 由于在这两种情况下您似乎都需要重定向,所以我看不出 Ajax 是多么合适的工具。看起来你可以在没有任何 javascript 的情况下达到预期的效果,只需将你的按钮变成你现在正在使用的 url 的链接,然后检查数据库并执行适当的服务器端重定向 是的,但在最终项目中,我会将按钮的文本发送到后端,查看用户是否存在,然后重定向到包含该用户特定信息的页面。跨度> 那你要么在URL中需要一个参数,要么以表单的形式发送数据 【参考方案1】:

只需在您的重定向调用前面放置一个 return 语句,它返回一个 HttpResponse 对象并且需要返回给调用者。

编辑:OP 更新并添加了回报,但这应该是一个很好的修复。请尝试传递 URL 和布尔值指示您是否应该重定向。 Django AJAX Redirect

【讨论】:

如果你在 url conf 中使用 app_name,别忘了使用 'app_name:home' 这是我发布的代码中的一个错字。问题是它仍然没有重定向,但它会打印出来。 你可以尝试使用reverse_lazy()吗?使用这个 from django.urls import reverse_lazy 重新阅读后,您可能还需要处理来自 JS 的重定向,使用要重定向到的 url 和一个布尔值传递数据以指示您是否应该重定向,并使用 JS 进行重定向一旦 AJAX 返回。我认为这可能是真正的问题 嘿伙计,如果您不介意,还有一个问题……我将如何将“profname”变量发送到我重定向到的页面?我需要这些信息来从后端文件中提取关于将在页面上加载的内容。

以上是关于如果查询匹配,则使用 Django 在 Ajax 调用后重定向的主要内容,如果未能解决你的问题,请参考以下文章

Django 07

django怎么模糊匹配json中的数据?

Django - 如果国家/地区字段等于美国,则发送 ajax 请求以将状态选择器设置为美国各州的元组

通过(ajax/javascript)发布到 django 视图打印空查询集

Django blog.models.Post.DoesNotExist:帖子匹配查询不存在

在两个日期之间搜索,如果存在 - django - ajax