我正在使用ajax对来自搜索结果的数据进行排序。
现在我想知道是否可以渲染html的某些部分以便我可以这样加载:
$('#result').html(' ').load('/sort/?sortid=' + sortid);
我这样做但是我将整个html页面作为响应,它将整个html页面附加到现有页面,这很糟糕。
这是我的views.py
def sort(request):
sortid = request.GET.get('sortid')
ratings = Bewertung.objects.order_by(sortid)
locations = Location.objects.filter(locations_bewertung__in=ratings)
return render_to_response('result-page.html',{'locs':locations},context_instance=RequestContext(request))
如何从我的视图函数中仅渲染<div id="result"> </div>
?或者我在这做错了什么?
答案 0 :(得分:19)
根据我的理解,如果收到ajax请求,您希望以不同的方式处理相同的视图。
我建议将您的result-page.html
拆分为两个模板,一个只包含您想要的div,另一个包含其他所有模板,并包含另一个模板(请参阅django's include tag)。
在您的视图中,您可以执行以下操作:
def sort(request):
sortid = request.GET.get('sortid')
ratings = Bewertung.objects.order_by(sortid)
locations = Location.objects.filter(locations_bewertung__in=ratings)
if request.is_ajax():
template = 'partial-results.html'
else:
template = 'result-page.html'
return render_to_response(template, {'locs':locations},context_instance=RequestContext(request))
结果-page.html中:
<html>
<div> blah blah</div>
<div id="results">
{% include "partial-results.html" %}
</div>
<div> some more stuff </div>
</html>
局部results.html:
{% for location in locs %}
{{ location }}
{% endfor %}