我正在为我的Django博客应用程序添加一个AJAX搜索功能。
这是我的代码:
search_form.html
<form id="search-form" method="get" action="{% url 'search' %}">
<input type="text" name="q" />
<input type="submit" value="Submit" />
</form>
<div id="search-results">
{% include "post_list.html" %} //html file which simply views all the requested posts
</div>
search.js
function search_submit() {
var query = $("#id_query").val();
$("#search-results").load(
"/search/?q=" + encodeURIComponent(query)
);
return false;
}
views.py
class PostSearch(ListView):
model = Post
template_name = 'search_form.html'
context_object_name = 'post_list'
def get(self, request, *args, **kwargs):
if self.request.is_ajax():
return self.render_to_response('post_list.html', self.get_context_data(**kwargs))
else:
return self.render_to_response(self.template_name, self.get_context_data(**kwargs))
def get_queryset(self):
queryset = super(TitleSearchMixin, self).get_queryset()
q = self.request.GET.get('q')
if q:
return queryset.filter(question_title__icontains=q)
基本上,我的QuestionSearch视图只返回一个“post_list.html”,它是一个模板,用于查看AJAX请求的多个帖子,同时在正常请求时返回整个“search_form.html”。出于某种原因,这给了我错误:
错误:
KeyError at /search/
u'object_list'
由于我被困,我有两个问题..
(1)为什么会出现这种错误?
(2)我的搜索功能实现是否以正确的方式完成..?我一直在阅读有关RESTf API设计的内容,但我不确定我的是否是“RESTful”:((
感谢!!!
答案 0 :(得分:0)
可以检查post_list.html。
如果您正在迭代(循环)object_list将其更改为post_list或删除类PostSearch(ListView)中的context_object_name ='post_list':
Q2,你正在做的是一个普通的ajax,restful API需要序列化和CRUD操作 例如GET阅读 POST / PUT插入/更新 删除删除
等..