0

我正在向我的 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>

搜索.js

function search_submit() {
    var query = $("#id_query").val();

    $("#search-results").load(
        "/search/?q=" + encodeURIComponent(query)
    );

    return false;
}

视图.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” :((

谢谢!!!

4

1 回答 1

0

如果您正在迭代 post_list 变量或 object_list,是否可以检查 post_list.html?

如果您正在迭代(循环)object_list,请将其更改为 post_list 或在 PostSearch(ListView) 类中删除 context_object_name = 'post_list':

Q2,你正在做的是一个普通的 ajax,restful API 需要序列化和 CRUD 操作,例如 GET 读取 POST/PUT 插入/更新 Delete 删除

ETC..

于 2013-08-12T09:09:02.793 回答