Djangoでナビゲーションバー検索ボックスを実行する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/1610934

  •  05-07-2019
  •  | 
  •  

質問

各ページの上部に表示されるナビゲーションバーに検索ボックスを統合したいと思います(このStackOverflowページの上部に、私が話している例があります)。

おそらくnav.htmlは次のようになります:

<ul id="menu">
    <li><a href="/products"></li>
    <li><a href="/service"></li>
    <li>{{ nav_search_form.as_p }}</li>
</ul>

forms.pyには次のものが含まれている可能性があります:

class NavSearchForm(forms.Form):
  query = forms.CharField(max_length=30, required=False)

DRY原則では、views.pyが次のようなすべてのページで「クエリ」を検索することは望ましくありません。

def ProductsPage(request):
    search_form = NavSearchForm()
    if request.GET.has_key('query'):
        query = request.GET['query'].strip()
    # deal with 'Products' here...

def ServicePage(request):
    search_form = NavSearchForm()
    if request.GET.has_key('query'):
        query = request.GET['query'].strip()
    # deal with 'Service' here...

検索クエリを処理して結果を表示するページを簡単にプログラムできます。すべてのページでリクエストを削除せずに、検索用語を抽出し、ユーザーをその検索ページにリダイレクトする(HttpResponseRedirect( '/ results /?query =' + query)を返す)にはどうすればよいですか?

役に立ちましたか?

解決

通常の検索URLで検索フォームにGETを実行させるだけです。

<form action="/search/" method="get">
...
</form>

URLをハードワイヤーしたくない場合は、URL逆引き参照機能を使用します...

<form action="{% url my-search-view %}" method="get">
...
</form>

質問を誤解していない限り、フォームは現在のページをロードしたのと同じURLに取得/投稿する必要があると考えているようです。

他のヒント

当社のサイトの1つで Google CSE を使用しており、できる限り簡単です取得する。有効にできる機能はいくつかありますが、簡単であり、標準のGoogle Goodness&#8482;をすべて取得できます。

  1. Joe Hollowayが示唆するように、別のビューを使用します。
  2. フォームの電源を使用

    def ProductsPage(request):
        search_form = NavSearchForm(request.GET)
        if search_form.is_valid():
            ....
    
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top