我的主页上有搜索输入。以前,我将数据保存在数据库中,并且我的方法将结果正确传递到了模板中。 但是,数据必须临时存储,因此我开始通过AJAX发送数据。重构代码后,结果将在我的视图中接收并格式化,但是我无法在结果模板中成功呈现上下文。
views.py中的方法有误:
def item_list(request):
products = {}
out = {}
if request.is_ajax():
query = request.POST.get('items')
products = format_products(query)
out = Sets.objects.filter(ItemInSet__item__name__in=[name for name, metrics in products.items() if metrics == '1']).exclude(ItemInSet__item__name__in=[name for name, metrics in products.items() if metrics == '0']).distinct()
if out:
paginator = Paginator(out, 10) # show 10 per page
page = request.GET.get('page', '1')
try:
out_paginated = paginator.page(page)
except PageNotAnInteger:
out_paginated = paginator.page(1)
except EmptyPage:
out_paginated = paginator.page(paginator.num_pages)
else:
out_paginated=out
return render(request, 'item_list.html', {'products': products, 'results': out_paginated})
我可以在if request.is_ajax():
中以及分页步骤之后访问数据。然后再次检查out
,它似乎是空的,并且方法呈现空对象。呈现模板后,它会触发{%empty%}标签,并显示“没有符合您的查询的结果”。
视图是否以某种方式被调用了两次并清除了过程中的数据,或者数据是否很快发布但没有通过新的AJAX重新发送并因此丢失?
如何更正方法?还是最好在网址中添加格式化的查询并通过GET到达?