3

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

干草堆代码:

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 代码可以在这里找到。

谢谢你。

4

1 回答 1

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)

抱歉在您之前的问题中误导,我也已修复它。

于 2012-05-06T09:58:42.863 回答