小编典典

使用JQuery和AJAX在Django中刷新div

ajax

我正在尝试使用AJAX和JQuery(在Django中)刷新页面的特定部分。如何获取仅重新显示div而不重新显示整个页面的信息。

    // In my template
    var tag_cloud_floor = function(floor) {
    $.ajax({ url: "/{{ user }}/{{ tag }}/",
                     data: {tag_cloud_floor: floor},
                     type: 'POST',
                     success: function(data) {
                         $('#tag_cloud).html(data);
                     },
    });

};

这是我的看法。

@login_required
def tag_page(request, username, tag):
  if username == request.user.username:
    tags = request.user.userprofile.tag_set.all()

    if request.is_ajax() and request.POST:
      floored_tags = []
      for t in tags:
        if t.item_set.all().count() >= int(request.POST['tag_cloud_floor']):
          floored_tags.append(t)
      tags = floored_tags

    tag = Tag.objects.get(title=tag)
    items = tag.item_set.all()
    return render_to_response("tag_page.html", { 'user': request.user , 
                                              'tag': tag,
                                             'tags': tags,
                                            'items': items })
  else:
  return HttpResponseRedirect('/' + request.user.username + '/')

当前,它将整个html页面放入#tag_page div中。我希望它用新的#tag_page div替换旧的#tag_page
div。如果替换$('#tag_cloud').html(data);$('body').html(data);它,则将整个页面刷新到应有的状态,但是我认为刷新整个页面是一种浪费。

如果有更好的方法,请告诉我。


阅读 321

收藏
2020-07-26

共1个答案

小编典典

首先,看起来您的代码已损坏-这不是有效的Javascript / jQuery指令:

$('#tag_cloud).html(data);

您需要添加缺少的引号:

$('#tag_cloud').html(data);

至于只刷新一个单一的div,我会将那个div的内容提取到一个单独的模板中my_div.html,用{% include "my_div.html" %}。然后,在我的AJAX视图中,将渲染并仅返回rendered my_div.html

2020-07-26