从Django视图执行jQuery函数?

从Django视图执行jQuery函数?,jquery,python,django,Jquery,Python,Django,我有一个注销视图,当用户成功注销时,我想执行一个jQuery函数,在toast弹出窗口中显示“you's signed out!”。如何从Django视图调用jQuery函数。我从这里得到了jQuery代码: VIEWS.PY: def signout(request): logout(request) return HttpResponseRedirect(reverse(index)) 存储在my header中的jQuery函数: <head> <scr

我有一个注销视图,当用户成功注销时,我想执行一个jQuery函数,在toast弹出窗口中显示“you's signed out!”。如何从Django视图调用jQuery函数。我从这里得到了jQuery代码:

VIEWS.PY:

def signout(request):
    logout(request)
    return HttpResponseRedirect(reverse(index))
存储在my header中的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>

将此添加到脚本标记:

$(document).ready(function(){
  toast("test");
});

将此添加到脚本标记:

$(document).ready(function(){
  toast("test");
});

我建议改用Django消息-


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

我建议改用Django消息-


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

不幸的是,我不知道JQuery,因此这将是一个更为伪代码/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);
      }
   });
})
def signout(request):
    if logout(request):
        return HttpResponse('You have successfully logged out!')
    else:
        return HttpResponseBadRequest('There was an error logging out.')
注意,我在
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();
        });
    });
}
最后,我想谈谈以下观点:

$('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);
      }
   });
})
def signout(request):
    if logout(request):
        return HttpResponse('You have successfully logged out!')
    else:
        return HttpResponseBadRequest('There was an error logging out.')

不幸的是,我不知道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);
      }
   });
})
def signout(request):
    if logout(request):
        return HttpResponse('You have successfully logged out!')
    else:
        return HttpResponseBadRequest('There was an error logging out.')
注意,我在
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();
        });
    });
}
最后,我想谈谈以下观点:

$('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);
      }
   });
})
def signout(request):
    if logout(request):
        return HttpResponse('You have successfully logged out!')
    else:
        return HttpResponseBadRequest('There was an error logging out.')

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

  • 在标题中使用jQuery插件
  • 使用django消息框架:
  • 将{message}}插入jQuery脚本
  • VIEW.PY

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

    {% if messages %}
        {% for message in messages %}
            <script type="text/javascript">
                $(document).ready(function(){toast("{{ message }}");});
            </script>
        {% endfor %}
    {% endif %}
    
    {%if消息%}
    {消息%中的消息为%s}
    $(document.ready(function(){toast({{message}}”);});
    {%endfor%}
    {%endif%}
    
    答案:我将两个答案结合起来得到答案:

  • 在标题中使用jQuery插件
  • 使用django消息框架:
  • 将{message}}插入jQuery脚本
  • VIEW.PY

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

    {% if messages %}
        {% for message in messages %}
            <script type="text/javascript">
                $(document).ready(function(){toast("{{ message }}");});
            </script>
        {% endfor %}
    {% endif %}
    
    {%if消息%}
    {消息%中的消息为%s}
    $(document.ready(function(){toast({{message}}”);});
    {%endfor%}
    {%endif%}
    
    因此,当我执行此操作时,会弹出“测试”,但如何让它在django注销视图中执行此操作?将代码置于注销视图中,并将测试替换为“您已注销”抱歉,我是jQuery/django新手。。。您的意思是这样的:def signout(request):logout(request)return HttpResponseRedirect(reverse(index,$(document).ready(function(){toast('test');});),所以当我执行该测试时,会弹出“test”,但如何让它从django signout视图中执行该操作?将代码放在signout视图中,并将测试替换为“you have signed out”抱歉,我是jQuery/Django的新手。。。您的意思是这样的:def signout(请求):logout(请求)返回HttpResponseRedirect(反向(索引,“$(document).ready(函数(){toast('test');});”)