1

DjangoにWebサイトがあります。すべてのページに検索入力を作成したい。一部の「base.html」では、この検索入力用にnewを記述しています。

views.pyに次のようなものを追加します:

def main(request):
    if request.method == 'POST':
        search_string = request.POST['search_string']
        result = search(search_string)
        return direct_to_template(request, 'found_page.html', {'result': result})`

しかし、私はすべてのページにそれが欲しいです。

そこで、新しい関数「search_function(request)」を作成し、views.pyのすべてのdefに追加します。または、デコレータを作成して、views.pyのすべてのdefの前に書き込むことができます。

新しいdefを追加するたびにそれをやりたくありません。しかし、私は方法がわかりません。君の力が必要

4

2 に答える 2

3

つまり、これがあなたがやりたいと思うことです。すべてのページ(該当する方)に検索入力フォームを表示し、1つのビューのみを使用して検索を処理します。

  1. 検索を処理する1つのビューを作成します
  2. <form>前の手順で実行したビューに対してアクションが実行される検索の要素を含むhtmlページを作成します
  3. base.htmlに含めるか拡張します

私が得られないのは、検索がローカルページでの検索である必要がありますか?(たとえば、このフォーラム内で検索してください)

request.GET['q']クエリを取得するには、またはrequest.POST['q']または同様の方法でクエリを指定できます。

def search(request):
  if 'q' in request.GET and request.GET['q']:
     // do something

検索(クエリ)がデータベース内のクエリ結果の状態を変更しない限り、を使用する必要はありませんPOSTGET代わりに使用してください。

于 2012-04-13T21:26:35.760 に答える
0

別の検索ビューに移動するようにフォームのアクションを設定し、その1つの関数が検索処理を処理するようにします。専用の検索ページを作成して、フォームが「POST」か「GET」かを確認するためにまったく同じことを行うことができます。「POST」は、他の前のページからすでに行われた検索です。

于 2012-04-13T21:20:59.303 に答える