django haystack - 使用通用的Views函数进行搜索

时间:2012-05-06 08:57:09

标签: django django-views django-urls django-haystack

我正在尝试将此代码从haystack转换为urls.py调用泛型视图函数,但我得到'function'对象没有属性'status_code'。我认为这是因为它没有返回响应对象。

haystack代码:

from django.conf.urls.defaults import *
from haystack.forms import ModelSearchForm, HighlightedSearchForm
from haystack.query import SearchQuerySet
from haystack.views import SearchView

sqs = SearchQuerySet().filter(author='john')

# With threading...
from haystack.views import SearchView, search_view_factory

urlpatterns = patterns('haystack.views',
    url(r'^$', search_view_factory(
        view_class=SearchView,
        template='search/search.html',
        searchqueryset=sqs,
        form_class=HighlightedSearchForm
    ), name='haystack_search'),
)

我的新urls.py只调用views.py中的search()。

在views.py中,我有

def search(request):
    sqs = SearchQuerySet().all()
    return search_view_factory(
        view_class=SearchView,
        template='search/search.html',
        searchqueryset=sqs,
        form_class=HighlightedSearchForm
        )

我这样做是因为我想根据用户的输入和状态来讨论sqs。

上面的search_view_factory不应该返回一个SearchView类,好像它会自动调用create_response()来返回render_to_response。尝试手动调用create_response(),但这也无效。

django-haystack code可以在这里找到。

谢谢。

1 个答案:

答案 0 :(得分:4)

search_view_factory返回视图函数而不是HttpResponse,您需要正确调用它。

def search(request):
    sqs = SearchQuerySet().all()
    view = search_view_factory(
        view_class=SearchView,
        template='search/search.html',
        searchqueryset=sqs,
        form_class=HighlightedSearchForm
        )
    return view(request)

很抱歉在上一个问题中误导了我,我也修了它。