0

このチュートリアルに基づいて、スフィンクス検索、postgresql、django を使用して全文検索を構築しようとしています: http://pkarl.com/articles/guide-django-full-text-search-sphinx-and-django-sp / . sphinx と postgresql のすべてのセットアップが完了し、動作しますが、 Sample Django コード部分に到達すると問題が発生しました。

djangoのviews&urlconfで*search_results*の機能をsearchStoryモデルに自作モデルで変更しただけです。URLConf については、*search_results* をビューと同じように検索に変更しただけで、検索テンプレートは何も変更しませんでした。

したがって、Django でフォームから検索しようとすると、例外が発生します。

TypeError at /search/
list() takes exactly 1 argument (0 given)

また、次のように urlpattern とビューの定義を変更して、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 &ldquo;<strong>{{ query }}</strong>&rdquo; 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 %}
4

1 に答える 1

1

間違っていたら訂正してください。ただし、Django-Sphinx は放棄されたプロジェクトのようです。最後の更新は 1 年前で、ほとんどの更新は 3 ~ 5 年前です。また、当時は Django について話すことはできませんでしたが、Sphinx でやろうとしていることをすぐに実行できるようになりました。

Django と Python のどのバージョンを使用していますか? list()引数を取ることができないので、あなたが得ているエラーは奇妙です。Pythonシェルでこれを試してください:

>> list()
[]

とにかく、問題の修正に役立つ可能性があるコードにいくつかの変更を加えました。ただし、 がない場合は、次の行で空としてresults渡します。'flows'

context = { 'flows': list() }

テンプレートを見ると、これは実際には何も達成していません。

urls.py:

(r'^search/', search),

ビュー.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て、空の検索のすべての結果、クエリの実際のフィルター処理された結果を返す簡単な検索として以下を実装できます。

ビュー.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))
于 2013-01-27T16:41:45.313 に答える