ホーム>source

アイテムのカテゴリを選択できるページがあり、別のテンプレートに移動して、そのカテゴリのすべてのアイテムを表示します。何を作成する必要があるので、タイトルを言うことで、これらの結果をさらにフィルタリングできますか?

views.py thatsは、アイテムをカテゴリでフィルタリングし、search.htmlテンプレートに移動する関数です

<前>ウィズウィズ

search.html

<前>ウィズウィズ

その下には、結果を表示するリストがあります

views.pyこの方法で試しましたが、「ページが見つかりません(404)」というエラーが表示されます「現在のパス、bike-category /は、これらのいずれにも一致しませんでした。」

<前>ウィズウィズ

URL:

<前>ウィズウィズ def category_view(request, category_id): item_list = Item.objects.filter(category__pk=category_id) return render(request, "search.html", {'item_list': item_list})
あなたの答え
  • 解決した方法 # 1

    フォームアクションにより、同じページに戻りますが、 category_id がありません 。 'bike-category/' に定義されたURLパスがないため、404になります。 。アクションを 'search/' に設定する必要があります 、またはより良いまだ url を使用して  次のようにパスの名前を含むテンプレートタグ:

    ウィズウィズ
    

    フォームは <form method="GET" action="{% url 'search' %}"> に送信する必要があるため、404エラーに対処する必要があります。 、そしてDjangoはあなたの 'search/' にリクエストを渡します  クラス。

    カテゴリ内のみを検索する場合は、 SearchView に通知する必要があります  どのカテゴリ。これはいくつかの方法で実行できますが、この検索は既にカテゴリビューから実行しているため、カテゴリ内で検索するための新しいURLを作成し、同じビューを使用するのが最も簡単な方法です。

    ウィズウィズ
    

    次に、これを受け入れるようにビューを変更できます。

    ウィズウィズ
    

    注: SearchView  パラメータとして、しかしそれにデフォルト値 urlpatterns = [ path('bikes/', BikeView, name='bikes'), path('', HomeView, name='home'), path('search/', SearchView, name='search'), path('search/<category_id>', SearchView, name='category_search'), path('bike-category/<category_id>', category_view, name='category') ] を与える  したがって、非カテゴリー検索は引き続き機能します。次に、渡された場合、最初にそのカテゴリーにフィルターをかけます。最後に、 def SearchView(request, category_id=None): if category_id: item_list = Item.objects.filter(category__id=category_id) else: item_list = Item.objects.all() query = request.GET.get('q') if query: item_list = item_list.filter(title__icontains=query) context = { 'item_list': item_list } return render(request, "search.html", context) でフィルターすることにより、カテゴリーフィルターにクエリを追加します。   category_id ではなく 。

    また、この新しいパスを使用するようにフォームアクションを更新する必要があります。

    ウィズウィズ
    

    最後に、カテゴリを None に渡す必要があります  コンテキストデータのテンプレート:

    ウィズウィズ
    
    item_list

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ python - IDで2つのデータフレームをパンダとマージする