質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

939閲覧

views.pyでURL内のパラメータを取得する方法

harug

総合スコア28

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/11/24 13:54

編集2021/11/25 19:32

前提・実現したいこと

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()など試してみましたが、何も変わらずでした。
初心者のため、皆さんのお力をお貸しいただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FKM

2021/11/26 03:20

form の actionプロパティで外部Urlに飛ばすことはセキュリティ上危険すぎるので、どのプログラムでもできないはずです(そんなことができたら、大変なことになってしまいます)。 なので、一度プログラムに読み込ませてから、スクリプトなどで遷移させる、あるいは外部リンクを生成するといいでしょう。
harug

2021/11/26 06:15

回答ありがとうございます。 なるほど、勉強不足でした。 具体的に何か参考になるサイトなどがあれば教えていただきたいです。
guest

回答1

0

自己解決

スクリプト内に画面遷移の処理を記述すると、無事解決できました。

投稿2021/11/28 17:17

harug

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問