【发布时间】:2010-11-18 17:50:42
【问题描述】:
我正在尝试使用 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);,它会将整个页面刷新到应有的状态,但我认为刷新整个页面是一种浪费。
如果有更好的方法,请告诉我。
【问题讨论】:
-
另外,是否可以将 ajax 工作分离到与初始页面加载的视图不同的视图?
-
当然可以将功能分离出来;使用单独的 URL 创建一个单独的视图,并让该视图仅返回标签数据。现在,您是以 JSON 格式返回它并重建页面上的标签,还是将其作为 HTML 片段返回并简单地将其插入页面,这取决于您。如果您计划在您的网站上使用大量 AJAX,请查看 django-piston