我正在尝试使用sphinx search,postgresql& amp;来构建全文搜索。 django基于本教程:http://pkarl.com/articles/guide-django-full-text-search-sphinx-and-django-sp/。 所有设置均为sphinx& postgresql并且它可以工作但是当我到达示例Django代码部分时我遇到了麻烦。
在django观看& urlconf,我只用我自己的模型将* search_results *的功能改为 search 和 Story 模型。对于URLConf,我只将* search_results *更改为 search ,就像在视图上一样,并且在搜索模板上没有任何更改。
因此,当我尝试在Django中搜索我的表单时,我会遇到异常:
TypeError at /search/
list() takes exactly 1 argument (0 given)
我也尝试通过改变urlpattern& amp;来改变基于steyblind的评论。像这样的视图定义:
(r'^search/(.*)?', search),
def search(request, query=''):
但仍然保持获得TypeError异常。 我在这里做错了吗?提前谢谢。
这是我的片段:
Urls.py
(r'^search/(.*)', search),
Views.py
def search(request, query):
try:
if(query == ''):
query = request.GET['query']
results = Flow.search.query(query)
context = { 'flows': list(results),'query': query, 'search_meta':results._sphinx }
except:
context = { 'flows': list() }
return render_to_response('search.html', context, context_instance=RequestContext(request))
search.html
{% extends "base.html" %}
{% block main %}
<div>
<form action="/search/" method="GET">
<input type="text" name="query"/>
<input type="submit">
</form>
{% if flows %}
<p>Your search for “<strong>{{ query }}</strong>” had <strong>{{ search_meta.total_found }}</strong> results.</p>
<p>search_meta object dump: {{ search_meta }}</p>
{% endif %}
<hr/>
{% for s in flows %}
<h3><a href="{{ s.get_absolute_url }}">{{ s.title }}</a></h3>
<p>(weight: {{ s.sphinx.weight }})</p>
<p>story.sphinx object dump: {{ s.sphinx }}</p>
{% empty %}
<p>YOU HAVEN'T SEARCHED YET.</p>
{% endfor %}
</div>
{% endblock %}
答案 0 :(得分:1)
如果我错了,请纠正我,但Django-Sphinx似乎是一个废弃的项目。它的最后一次更新是一年前,大多数更新是在3 - 5年前。此外,我当然不能代表Django,但它现在可以开箱即用,你正在尝试用Sphinx做什么。
您使用的是哪种版本的Django和Python?你得到的错误很奇怪,因为list()
不能参数。在python shell中试试这个:
>> list()
[]
无论如何,我对代码做了一些修改,可能有助于解决问题。 但,如果没有results
,则您在此行中将'flows'
作为空白传递:
context = { 'flows': list() }
如果你看模板,这真的什么都没有。
urls.py:
(r'^search/', search),
views.py:
def search(request):
query = request.GET.get('query')
if query:
results = Flow.search.query(query)
if results:
context = { 'flows': list(results),'query': query, 'search_meta':results._sphinx }
else:
context = { 'flows': list() }
return render_to_response('search.html', context, context_instance=RequestContext(request))
所有这一切,我强烈建议,因为这个项目已经过时,所以你使用自己的搜索。或者,如果您需要更多功能,可以使用经常更新的Haystack
等搜索应用。使用与上述相同的urls.py
,您可以将以下内容实现为一个简单的搜索,它将返回空白搜索的所有结果,即查询的实际过滤结果。
views.py:
def search(request):
query = request.GET.get('q')
results = Flow.objects.all()
if query:
results = results.query(query)
return render_to_response('search.html', {"flows": results,}, context_instance=RequestContext(request))