2

Django Haystack で検索ページを設定するには、URLconf スニペットを挿入する必要がありurl(r'^search/', include('haystack.urls'))ます。ただし、これは (少なくとも Django/MVC に関する私の非常に基本的な理解から)、追加のコンテキスト (つまり、追加の辞書キー/値) をページにレンダリングする簡単な方法がないことを意味します。

特に、GET リクエストからページに渡された変数を反映するように検索フィールドをカスタマイズしたいと考えています。

<form method="get" action=".">
<input type="text" name="q" value="">
<!-- result html here -->
</form>

パラメータ?q=twitterが GET リクエストの一部として URL に添付されているとします。valueセレクターを に等しくしたいと思いtwitterます。ビューを制御できる場合は、次のようにします。

if request.method == 'GET':
    q = request.GET['q']
    return render(request, 'template.html', {'q': q})

そして、HTML のセレクターqの値として使用します。value<input>

Haystack ソースを編集する以外に、簡単な方法でこれを達成する方法はありますか?

4

4 に答える 4

9

Haystackビューをサブクラス化して、コンテキストに追加できます。

検索アプリでファイルを作成しviews.pyます(ファイルがない場合)。次に、Haystackビューをインポートしてください。次に、次のようなサブクラスを作成できます。

import haystack.views

class SearchView(haystack.views.SearchView):
    """
    We subclass the base haystack view in order to add context.
    """

    def extra_context(self):
        return {
            'yourValue': yourValue,
        }

urls.py検索アプリ内から、のビューへのパスを変更することを忘れないでください。

from yourSite.apps.search.views import SearchView
于 2012-12-03T10:24:54.723 に答える
2

カスタムコンテキストプロセッサを使用してこれを達成しました:

from django.template import RequestContext
from django.http import HttpResponse

def get_search_query(request):
    search_query = request.GET.get('q', '')
    print search_query
    return {
        'search_query':search_query
    }

{{ search_query }}次に、任意の HTML テンプレートを呼び出すだけです。

于 2012-07-13T23:21:26.483 に答える
2

Haystack はすでにクエリを渡しています。テンプレート変数はクエリと呼ばれます。

<div>Your query was {{ query }}</div>

コンテキストでさらに多くのものが必要な場合は、basic_search メソッドを使用する必要があります。ビューを作成し、basic_search を呼び出す必要があります。したがって、views.py では次のようになります。

from haystack.views import basic_search

def yourview(request):
    ...
    return basic_search(request, extra_context={ 'foo': 'boo', })

必要に応じて設定できるパラメーターは他にもあります。

basic_search(request, template='search/search.html', load_all=True, form_class=ModelSearchForm, searchqueryset=None, context_class=RequestContext, extra_context=None, results_per_page=None)

興味深いことに、extra_context を除くすべての URL から SearchView() を使用して直接呼び出すことができます。urls.py で:

from haystack.views import SearchView
...
url(r'^$', SearchViewtemplate='path/to/your/template', load_all=True, form_class='YouForm', searchqueryset=AQuerySet, context_class=RequestContext, results_per_page=10), name='the_name_you_want')

どのパラメーターも必須ではありません。イベント

于 2012-11-21T23:21:46.027 に答える