我正在尝试使用ajax
创建实时搜索过滤器$(function() {
$('#search-item').keyup(function() {
$.ajax({
type: "GET",
url: "/toysprices/",
data: {
'query' : $('#search-toy').val(),
'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
},
success: searchSuccess,
dataType: 'html'
});
});
});
function searchSuccess(data, textStatus, jqXHR)
{
console.log(data);
}
和我的views.py
f request.method == "GET":
search_text = request.GET['query']
if search_text:
search_text = request.GET['query']
statuss = Status.objects.filter(status__contains = search_text)
else:
statuss = Status.objects.all()
return render(request, 'ajax_search.html', {'statuss':statuss})
它正常工作,但它返回整个html页面,我怎样才能获得我想在模板中呈现的部分。
答案 0 :(得分:1)
使用JSON返回结果将解决您的问题。
例如,
def search(request):
if request.method == "GET":
return_array = []
search_text = request.GET.get('query') # Always put request.GET.get('param') instead of request.GET['param']
if search_text:
search_text = request.GET.get('query')
statuss = Status.objects.filter(status__icontains = search_text)
else:
statuss = Status.objects.all()
for i in statuss:
return_sub_array = {}
return_sub_array['status_name'] = i.status_name
return_array.append(return_sub_array)
return HttpResponse(json.dumps(return_array))
$('#search-item').keyup(function() {
$.ajax({
type: "GET",
url: "/toysprices/",
dataType: 'JSON',
data: {
'query' : $('#search-toy').val(),
'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
},
success: function(data){
if(data.length > 0 )
{
console.log(data);
for (var i = 0; i < data.length ; i++) {
var obj = data[i]['status_name'];
console.log(obj)
// further logic goes here
}
}
else {
console.log("No result found");
}
},
error:function(data){
console.log('error')
console.log(data)
}
});
});
答案 1 :(得分:1)
在大多数情况下,它是您用来调用的 url,假设您在 url.py 中有以下路径
path('Import/', views.Import, name='import'),#.....1
path('getMetaData/', views.metaData, name='metadata'),#....2
和您的 url: http://127.0.0.1:8000/folder/Import/ 正在使用显示页面的第一个路径,如果您希望从 views.py 中的 metaData 函数从 ajax 获取数据,如果您使用上面的路径 2,它将为您提供html,所以你的路径应该如下:
path('Import/getMetaData/', views.metaData, name='metadata'),#....3
答案 2 :(得分:0)
您正在渲染html并在视图中返回它。除了html之外,这个视图没有什么可期待的。为了将JSON对象作为响应返回,您的视图应该返回如下响应:
eval_poly