我正在尝试使用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);它,则将整个页面刷新到应有的状态,但是我认为刷新整个页面是一种浪费。
$('#tag_cloud').html(data);
$('body').html(data);
如果有更好的方法,请告诉我。
首先,看起来您的代码已损坏-这不是有效的Javascript / jQuery指令:
$('#tag_cloud).html(data);
您需要添加缺少的引号:
至于只刷新一个单一的div,我会将那个div的内容提取到一个单独的模板中my_div.html,用{% include "my_div.html" %}。然后,在我的AJAX视图中,将渲染并仅返回rendered my_div.html。
div
my_div.html
{% include "my_div.html" %}