python – 在django中传递消息时重定向
在我检查用户是否存在user_settings之后,我正在尝试运行重定向(如果它们不存在 – 用户被带到表单输入并保存它们).
我想将用户重定向到适当的表单,并向他们发送他们必须“保存他们的设置”的消息,以便他们知道为什么他们被重定向. 该函数如下所示: def trip_email(request): try: user_settings = Settings.objects.get(user_id=request.user.id) except Exception as e: messages.error(request,'Please save your settings before you print mileage!') return redirect('user_settings') 此功能检查用户设置并适当地重定向 – 但消息永远不会出现在模板的顶部. 您可能首先想到:“Django中的消息是否正确设置?” 我有其他功能,我使用非重定向的消息,消息在模板中按预期显示没有问题.消息适当地集成到我的模板中并起作用. 只有当我使用重定向时才能看到我发送的消息. 如果我使用如下的渲染,我会看到消息(当然,URL不会改变 – 我希望发生这种情况). def trip_email(request): try: user_settings = Settings.objects.get(user_id=request.user.id) except Exception as e: messages.error(request,'Please save your settings before you print mileage!') form = UserSettingsForm(request.POST or None) return render(request,'user/settings.html',{'form': form}) 我还有一些其他需要使用重定向的地方,因为它在功能上是有意义的 – 但我也想将消息传递给那些重定向. user_settings函数如下所示: def user_settings(request): try: user_settings = Settings.objects.get(user_id=request.user.id) form = UserSettingsForm(request.POST or None,instance=user_settings) except Settings.DoesNotExist: form = UserSettingsForm(request.POST or None) if request.method == 'POST': settings = form.save(commit=False) settings.user = request.user settings.save() messages.warning(request,'Your settings have been saved!') return render(request,{'form': form}) 我在文档中找不到任何说明您无法发送带有重定向的邮件的内容…但我无法弄清楚如何让它们显示. 编辑: {% for message in messages %} <div class="alert {{ message.tags }} alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span> </button> {{ message }} </div> {% endfor %} 我不确定它是否重要 – 但它看起来几乎从某个地方两次叫’GET’. 对于这两个URL,URL部分看起来像这样: # ex: /trips/email url(r'^trips/email/$',views.trip_email,name='trip_email'),# ex: /user/settings url(r'^user/settings/$',views.user_settings,name='user_settings'), 解决方法
您无法查看错误消息,因为它没有呈现,因此消息无处可去.执行此类操作的最佳方法是呈现中间页面,该页面将显示错误消息,并在超时后重定向,这是支付网关在将您重定向到银行时使用的类型.
你可以这样做: def trip_email(request): try: user_settings = Settings.objects.get(user_id=request.user.id) except Exception as e: return render(request,'no_setting_error.html',{'form': form}) 在no_setting_error html页面上,插入Javscript以在超时后自动重定向,如: <script> function redirect(){ window.location.href = "/user_settings"; } setTimeout(redirect,3000); </script> 这将在3秒后自动将您从错误页面重定向到user_settings页面. 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |