Djangoでナビゲーションバー検索ボックスを実行する最良の方法は何ですか?
-
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;をすべて取得できます。
- Joe Hollowayが示唆するように、別のビューを使用します。
-
フォームの電源を使用
def ProductsPage(request): search_form = NavSearchForm(request.GET) if search_form.is_valid(): ....
所属していません StackOverflow