前提・実現したいこと
Django上でWebアプリの作成をしています。
内容としては、プルダウンメニューから町名を選択し、検索ボタンを押すとその町のお店の一覧を表示するようなページに遷移するようなアプリケーションを作成しようと思っています。
その中で、「検索ボタンを押すと各町のページに遷移する機能」を実装したいのですが、うまくできません。
発生している問題と理想
各町のページは一つのテンプレート(base.py)を作成し、それをもとに作成できると想像しています。
上記の機能を実装するにあたって、<select>で受け取ったvalueの値を利用して簡単にコーディングできないかと考えましたが、views.pyやurls.pyなどをどのようにいじればよいのかが分かりませんでした。
プルダウンで町を選択し、検索ボタンを押すと(石川町を選択した場合の)URLは
http://127.0.0.1:8000/search_shop/?csrfmiddlewaretoken=7hj2qZh0bo2nIpvlIs9UVGGxxSq9TKsWZoKvlMwuH6r7QidouEw5qltikDVBTekP&select_town=ishikawa.html
というふうになります。
最後の「select_town=ishikawa.html」の部分を取ってきて、その値である~.htmlに遷移させたいです。
該当のソースコード
index.htmlです。
なお、アプリ名はsearch_shopです。
html
1 <form method='GET' action="{% url 'search_shop:shop_town' %}" id="index_form"> 2 {% csrf_token %} 3 <select name="select_town"> 4 <option value="">選択してください</option> 5 {% for town_en,town_ja in options.towns.items %} 6 <option value="{{town_en}}.html" name="town">{{town_ja}}</option> 7 {% endfor %} 8 </select> 9 <input type='submit' value='検索'> 10 </form>
最終的には、検索ボタンが押されたら、ここ↑で指定したoptionのvalueの値のhtmlを表示させたいです。
views.pyです。
python
1# ここで各町のhtmlを表示させる関数を定義するイメージ 2def ShopView(request): 3 if 'select_town' in request.GET: 4 select_town = request.GET.get('select_town') 5 template_name = "{}.html".format(select_town) 6 return render(request,template_name) 7 8 9def Shop_Info(request): 10 template_name = "index.html" 11 options = { 12 'towns':{"ishikawa":"石川町", "etomo":"絵鞆町", "kaigan":"海岸町", "kagawa":"香川町", "kamishiro":"神代町", "kounan":"港南町", "saiwai":"幸町"}, 13 } 14 return render(request, template_name, {'options':options}) 15
ShopViewをどうしたらよいのか…。
次にプロジェクトのurls.pyです。
python
1urlpatterns = [ 2 path('admin/', admin.site.urls), 3 path('',include('search_shop.urls')), 4 path('search_shop/',include('search_shop.urls')), 5]
最後にsearch_shop/urls.pyです。
python
1urlpatterns = [ 2 path('',views.IndexView,name='indexview'), 3 path('',views.Shop_Info,name='shop_town'), 4 path('search_shop/',views.Shop_Info,name='shop_town'), 5 path('search_shop/',views.ShopView,name='shopview'), #ここの第一引数に、各ページ(~.html)を表すパラメータを追加できないかと考えています。 6]
色々調べて試しましたが、解決策は見つかりません。
get_context_data()など試してみましたが、何も変わらずでした。
初心者のため、皆さんのお力をお貸しいただきたいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー