Django-在没有重新加载的情况下更新基本模板的分区

时间:2013-11-26 18:49:39

标签: jquery ajax django

我想在我的基本模板中包含通知,因为它位于stackoverflow左上角。我知道这可以通过制作自定义模板标记或自定义上下文处理器来完成。

现在我的要求是我不希望每次加载页面时都加载通知,而只是在我们点击通知图标时才想加载通知。

我不知道还需要什么其他代码或脚本,因为我是jquery / ajax的新手。

如果需要任何其他详细信息,请与我们联系。感谢。

编辑:(添加以下详细信息)

context_prrocessors.py:

def notifications(request):
 if request.POST and request.is_ajax:
  notify_obj = #some logic here
  return {'notify_obj': notify_obj}

base.html(部分):

<div id="notify-div">
<form id="notify-form" method="post">
 <input type="submit" name="notify" value="Show notifications">
 {% csrf_token %}
</form>
{% for notify in notify_obj %}
 {{ notify.user.user_id.username }}, {{ notify.wish.wish_text }} - {{ notify.added }}
{% endfor %}
</div>
<script>
    $(document).ready(function() {
        $('#notify-form').submit(function() { // catch the form's submit event
            $.ajax({ // create an AJAX call...
                data: $(this).serialize(), // get the form data
                type: $(this).attr('method'), // GET or POST
                url: $(this).attr('action'), // the file to call
                success: function(response) { // on success..
                    $('#notify-div').html(response); // update the DIV
                }
            });
            return false;
        });
    });
</script>

请告诉我应该在这里使用JS。

2 个答案:

答案 0 :(得分:1)

我认为如果你的通知来自两种方式(模板视图和Ajax),你不应该同时混合使用帖子表单,模板标签和Ajax。如果我是你,我会用Ajax + javascript做任何事情。

只用一个包含“onclick”属性中的函数的按钮替换您的表单,该按钮将对您的通知视图执行Ajax调用,然后使用成功回调更新div标记。

<script>
    function loadNotification() {
        $.get( "/url/to/notifications", function( data ) {
            $( "#notify-form" ).html( data );
        });
    }
</script>

<input id="clickMe" type="button" value="clickme" onclick="loadNotification();" />

另外,我会使用GET请求而不是POST。

我希望我足够清楚; - )

答案 1 :(得分:0)

我建议您查看Django messages framework,而不是编写自己的通知应用程序。在必要时将它连接到$.get()是微不足道的。