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

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

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

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

URL

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

Python

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

Q&A

解決済

1回答

6077閲覧

python django urlパラメータ取得

y.ssss

総合スコア27

Django

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

URL

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

Python

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

0グッド

1クリップ

投稿2020/02/16 17:11

編集2020/02/16 17:17

現在djangoの学習中なのですが、urlに引数を乗せたいです。

urls.py path('shop/<str:name>/<int:number>', views.detail, name='detail'),

上記のようなurlでnameとnumberを指定したいのですが、うまくいかないです。。

templats <a href="{% url 'detail' name = 'a' number = 1 %}" class = 'btn-right-radius'>shop</a>
views.py def detail(requests,name,number):

のようにviewでその引数に応じた処理を書きたいです。。
idなどがふられているデータは持っていない為単純に指定の引数を持たせられればと思ってます。。

初歩的なことなのですが、お力添えしていただけると助かります。。。

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

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

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

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

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

quickquip

2020/02/17 04:02

>うまくいかないです の中身を書かないといけないと思います
guest

回答1

0

ベストアンサー

こんにちは、私も学習中なので的外れな回答であれば申し訳ないです。
少し気になったのが、str:nameの部分で、この部分は

#urls.py path('shop/<ディレクトリ名orファイル名>/<int:number>', views.detail, name='number'),

という形になると思います。
なので、shopの部分はプロジェクトルーティングの部分となり、<ディレクトリ名>の指定されるアプリケーション側のルーティングに処理を投げるという形になるように思います。
ここではアプリケーション側ルーティングをappsとした例にしています。

こうする事でアプリケーション側のパス指定のshopをアプリケーション側で指定する事は無くなります。多分ですが、こうしなければ、絶対パスの状況を考えるに、パスが繋がらないかと思います。

#shop/urls.py urlpatterns=[ path("",include('apps.urls')) ]

id名などはない状況で、という事なのでモデルとデータベースの連携を行わないとなれば
必然的に静的ファイルとなるのではないかと思いますので、もしパスコンバータを使用している部分に任意の名前を付けたいのであれば、無理に変数を変えるのではなく、ディレクトリを細分化して構築するというのはどうでしょうか?

パスコンバータが使用できる状況は、モデルデータベースとの連携で、動的に変わるレスポンス情報の場合に限るように思います。
パスコンバータの変数名はモデルとデータベースの主キーとして扱われる物になっているので、
今回の質問内容の状況と合致していないように感じました。

ちなみに以下のコードなのですが

templats <a href="{% url 'detail' name = 'a' number = 1 %}" class = 'btn-right-radius'>shop</a>

このタグは動かないように思います。urlタグはURLの逆引きの場合にのみ動作すると思いますので、
この部分での変数の代入等は出来ないと思います。

この部分でモデルデータベースからの主キー変数名を動的に取得してという状況を作り出すのであれば、セッションという方法が存在します。

もし、データベースの連携を行う状況で、パスコンバータの変数を任意な値に変える場合には
slug_url_kwarg=を使用した例で以下のようになると思います。
これはapps/urls.pyでのキーワードを変数とするというような形になっています。

#shop/urls.py urlpatterns=[ path("",include('apps.urls')) ]
#apps/urls.py app_name = 'apps' urlpatterns=[ path('apps_detail/<str:detail>', views.Detail.as_view(), name='detail'), ]
#template.html <a href="{% url 'apps:detail'apps.detail %}" class = 'btn-right-radius'>shop</a>
#views.py from django.views import generic class Detail(generic.DetailView):      model= ~~ template_name='template.html' slug_url_kwarg= 'detail'

形としてはこういった状態になるのではないかという例になります。
動作を確認した訳ではないので、動かなかったらすみません。

投稿2020/02/22 02:40

UPMAN

総合スコア13

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

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

y.ssss

2020/02/24 17:19

ご返信が遅くなり申し訳ありませんでした。 とても細かくご教授いただきありがとうございます!! 上記の方法で無事解決いたしましたので ベストアンサーにさせていただきます。 ありがとうございました。
UPMAN

2020/02/28 06:19

お力になれて良かったです。 こちらこそありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問