0

我有一个退出视图,当用户成功退出时,我想执行一个 jQuery 函数,上面写着“你已经退出了!” 在吐司弹出。如何从 Django 视图调用 jQuery 函数。我从这里得到了 jQuery 代码:http: //shawntabai.com/wp/2011/09/06/toast-notifications-using-jquery/

意见.PY:

def signout(request):
    logout(request)
    return HttpResponseRedirect(reverse(index))

存储在我的标题中的 jQuery 函数:

<head>
<script type="text/javascript">
    function toast(sMessage)
{
    var container = $(document.createElement("div"));
    container.addClass("toast");

    var message = $(document.createElement("div"));
    message.addClass("message");
    message.text(sMessage);
    message.appendTo(container);

    container.appendTo(document.body);

    container.delay(100).fadeIn("slow", function()
    {
        $(this).delay(2000).fadeOut("slow", function()
        {
            $(this).remove();
        });
    });
}
</script>
<head>

我可以做这样的事情:

def signout(request): 
    logout(request) 
    return HttpResponseRedirect(reverse(index, "$(document).ready(function(){toast('test');});"))
4

4 回答 4

2

我建议改用 Django 消息 - https://docs.djangoproject.com/en/dev/ref/contrib/messages/

您可以检查模板中是否填充了“消息”并显示 toast 通知。

于 2012-08-03T20:36:31.360 回答
1

将此添加到您的脚本标签:

$(document).ready(function(){
  toast("test");
});
于 2012-08-03T19:43:13.247 回答
0

回答:我结合了两个回答来得到我的答案:

  1. 在标题http://shawntabai.com/wp/2011/09/06/toast-notifications-using-jquery/中使用 jQuery 插件
  2. 使用 django 消息框架:https ://docs.djangoproject.com/en/1.4/ref/contrib/messages/
  3. 将 {{ message }} 插入到 jQuery 脚本中。

视图.PY

def signout(request):
    logout(request)
    messages.add_message(request, messages.INFO, 'Signout Successful.')
    return HttpResponseRedirect(reverse(index))

索引.html

{% if messages %}
    {% for message in messages %}
        <script type="text/javascript">
            $(document).ready(function(){toast("{{ message }}");});
        </script>
    {% endfor %}
{% endif %}
于 2012-08-06T21:28:20.237 回答
0

不幸的是,我不知道 JQuery,所以这将是更多的伪代码-y/Prototype-y,但这是最好的方法。(JQuery 用户,请随时使用实际 JQuery 修复它)

在您的注销链接上,添加一个对视图执行 AJAX 请求的事件处理程序:

$('a').click(function() {
   Ajax.send('/path/to/logout/', {
      onSuccess: function(response) {
         toast(response.responseText, function() {
             window.location = '/path/to/index/';
         });
      },
      onFailure: function(response) {
         toast(response.responseText);
      }
   });
})

请注意,我向toast(). 您需要将 toast 更改为:

function toast(sMessage, action)
{
    var container = $(document.createElement("div"));
    container.addClass("toast");

    var message = $(document.createElement("div"));
    message.addClass("message");
    message.text(sMessage);
    message.appendTo(container);

    container.appendTo(document.body);

    container.delay(100).fadeIn("slow", function()
    {
        $(this).delay(2000).fadeOut("slow", function()
        {
            $(this).remove();
            if (action) action();
        });
    });
}

最后,观点:

def signout(request):
    if logout(request):
        return HttpResponse('You have successfully logged out!')
    else:
        return HttpResponseBadRequest('There was an error logging out.')
于 2012-08-03T20:48:45.107 回答