【问题标题】:django haystack - using a generic Views function to do searchdjango haystack - 使用通用视图函数进行搜索
【发布时间】:2012-05-15 05:00:42
【问题描述】:

我正在尝试将此代码从 haystack 转换为调用通用视图函数的 urls.py,但我得到 'function' 对象没有属性 '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 code 可以在这里找到。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    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)
    

    抱歉在你之前的问题中误导了,我也已经修复了。

    【讨论】:

    • 使用您的回答中提到的技术时,我遇到了问题。它不断给我视图中没有结果。虽然在打印 sqs 时,我确实得到了结果。任何想法为什么会发生这种情况??
    • @SalmaHamed 听起来像是搜索表单不正确,或者某些关键字确实没有结果。你能用一个问题来详细说明一下吗?
    • 谢谢。很好的解决方案。节省了我数小时的精力。
    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2015-09-30
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多