Django中的成功消息

时间:2018-05-01 16:12:47

标签: python django

在我的django应用程序中,我正在进行表单输入。一旦该表单被验证,我在Django Message Framework的帮助下显示成功消息。

当前状态

当我将表单重定向到相同的url(表单的url)时,我能够在提交表单后在模板中显示成功消息

我的views.py

if form.is_valid():
    form_data = form.save()

    messages.success(request, 'Submited Successfully')
    return redirect('form-url')

我想要什么

提交表单后,我想在同一页面上显示成功消息(form-url),然后我想重定向到新的网址list-of-submitted-forms

为此,我对views.py

做了类似的事情
 if form.is_valid():
        form_data = form.save()

        messages.success(request, 'Submited Successfully')
        return redirect('list-of-submitted-forms')

我面临的问题

我正在重定向到新的url.But而没有在form-url页面上获得成功消息。当我转到form-url页面时(通过单击重定向到该URL的按钮),该消息也是如此显示'Submited Successfully'

我的HTML / JS

<script>
    {% if messages %}
        {% for message in messages %}
                    {% if message.tags == "success" %}
                         swal({text:"{{ message }}",icon: "success",timer: "4000",buttons: false})  
                    {% endif %}
            {% endfor %}

    {% endif %}

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,这就是我所做的

首先添加查询参数?redirect ='/ newpage',而不是从控制器重定向到另一个页面。并重定向到相同的上一页。

从JavaScript中捕获此查询参数和 几秒钟后延迟运行widow.location ='/ newpage'

答案 1 :(得分:0)

有很多方法可以做你想做的事情,我用JsonResponse告诉你一种方法。

<强>视图

from django.http import JsonRespon   
from django.core.urlresolvers import reverse 

if form.is_valid():
    form_data = form.save()

    response = {'msg':'Submited Successfully',
                'url':reverse('list-of-submitted-forms'),
                'created':True}
    return JsonResponse(response)

<强> JS

$("#your_form").submit(function(){
    var formData = new FormData($(this)[0]);

    $.ajax({
        url:"URL",
        type:'POST',
        data:formData,
        processData: false,
        contentType: false, 
        success: function(data){
            if(data.created){
                alert(data.msg); // handle the message , till the user click ok, and redirect to data.url
                window.location.href = data.url;
            }
            else{
                $("your_form").html($("your_form",data));
            }
        },
        error:function(){
            alert("error");
        }
    });
    return false;
});