如果查询匹配,则使用 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 - 如果国家/地区字段等于美国,则发送 ajax 请求以将状态选择器设置为美国各州的元组
通过(ajax/javascript)发布到 django 视图打印空查询集