簡體   English   中英

從Django視圖執行jQuery函數?

[英]Execute jQuery function from a Django view?

我有一個退出視圖,當用戶成功退出時,我想執行一個jQuery函數,上面寫着“您已經退出!”。 在烤面包中彈出。 如何從Django視圖調用jQuery函數。 我從這里獲得了jQuery代碼: http : //shawntabai.com/wp/2011/09/06/toast-notifications-using-jquery/

VIEWS.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');});"))

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

您可以檢查模板中是否填充了“消息”,並顯示吐司通知。

將此添加到您的腳本標簽:

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

不幸的是,我不了解JQuery,因此這將是更多的偽代碼y /原型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()添加了第二個參數。 您需要將烤面包更改為:

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.')

解答:我結合了兩個回答來得到答案:

  1. 在您的標頭中使用jQuery插件http://shawntabai.com/wp/2011/09/06/toast-notifications-using-jquery/
  2. 使用Django消息框架: https : //docs.djangoproject.com/en/1.4/ref/contrib/messages/
  3. 將{{message}}插入jQuery腳本。

查看

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 %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM