加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在django中传递消息时重定向

发布时间:2020-12-20 13:18:21 所属栏目:Python 来源:网络整理
导读:在我检查用户是否存在user_settings之后,我正在尝试运行重定向(如果它们不存在 – 用户被带到表单输入并保存它们). 我想将用户重定向到适当的表单,并向他们发送他们必须“保存他们的设置”的消息,以便他们知道为什么他们被重定向. 该函数如下所示: def trip
在我检查用户是否存在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">&times;</span>
    </button>
    {{ message }}
  </div>
{% endfor %}

我不确定它是否重要 – 但它看起来几乎从某个地方两次叫’GET’.

is calling get twice like this normal?

对于这两个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页面.

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读