2013-08-12 4 views
0

Я добавляю функцию поиска AJAX в свое приложение для блогов Django.Django & AJAX search view дает мне KeyError

Вот мой код:

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' 

Поскольку я застрял, у меня есть 2 вопроса ..

(1) Почему возникающую эта ошибка?

(2) Является ли моя реализация функции поиска даже выполненной правильно.? Я читал о дизайне RESTf API, но я не уверен, является ли мой «RESTful» или нет: ((

Спасибо !!!

+0

Опубликовать Ваше отслеживающий. –

ответ

0

мог проверить post_list.html если вы перебор post_list переменных или object_list

если вы перебор (Looping) object_list изменить его post_list или удалить context_object_name = 'post_list' в классе PostSearch (ListView):

Q2, что вы делаете, это нормальный Аякс, успокоительный API требует сериализации и операции CRUD , например GET, чтобы читать PO ST/PUT Insert/Update Удалить для удаления

и т.д ..

+0

Спасибо за ответ! Но если вы посмотрите на мой код, я уже поставил context_object_name = 'post_list' в начале, но он дал мне KeyError .... – user2492270