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

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

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

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

Python

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

Q&A

解決済

1回答

1158閲覧

NoReverseMatch を解決したい。

shun173

総合スコア4

Django

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

Python

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

0グッド

0クリップ

投稿2020/06/07 01:01

前提・実現したいこと

DjangoでECアプリの機能の実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

NoReverseMatch at /ecapp/product/9/ Reverse for 'detail' with arguments '('',)' not found. 1 pattern(s) tried: ['ecapp/product/(?P<product_id>[0-9]+)/$'] Request Method: POST Request URL: http://127.0.0.1:8000/ecapp/product/9/ Django Version: 2.2.5 Exception Type: NoReverseMatch Exception Value: Reverse for 'detail' with arguments '('',)' not found. 1 pattern(s) tried: ['ecapp/product/(?P<product_id>[0-9]+)/$']

該当のソースコード

detail.html

html

1<form action="{% url 'ecapp:detail' product.id %}" method="post">{% csrf_token %} 2 {{ add_to_cart_form.as_p }} 3 <button type="submit" name="buy_now" class="btn btn-primary"> 今すぐ購入 </button> 4 <button type="submit" name="in_cart" class="btn btn-outline-primary"> 5 <span class="text">カートに入れる</span> <i class="fas fa-shopping-cart"></i> 6 </button> 7</form>

urls.py

python

1app_name = 'ecapp' 2urlpatterns = [ 3 path('product/<int:product_id>/', views.detail, name='detail'), 4 path('cart/', views.cart, name='cart'), 5]

views.py

python

1def detail(request, product_id): 2 product = get_object_or_404(Product, pk=product_id) 3 if request.method == 'POST': 4 num = request.POST['num'] 5 num = int(num) 6 if num == 0: 7 messages.warning(request, '個数を選択してください') 8 return redirect('ecapp:detail', product_id=product_id) 9 # カートに追加されたとき 10 if 'in_cart' in request.POST: 11 if 'cart' in request.session: 12 if str(product_id) in request.session['cart']: 13 request.session['cart'][str(product_id)] += num 14 else: 15 request.session['cart'][str(product_id)] = num 16 else: 17 request.session['cart'] = {str(product_id): num} 18 messages.success(request, f"{product.name}{num}個カートに入れました!") 19 return redirect('ecapp:cart') 20 # 今すぐ購入されたとき 21 elif 'buy_now' in request.POST: 22 cart_products = {str(product_id): num} 23 purchase_form = ProfileForm(request.POST, None) 24 total_price = product.price * num 25 context = { 26 'purchase_form': purchase_form, 27 'cart_products': cart_products, 28 'total_price': total_price, 29 } 30 return render(request, 'ecapp/cart.html', context) 31 32 else: 33 add_to_cart_form = AddToCartForm(product_id=product_id) 34 context = { 35 'product': product, 36 'add_to_cart_form': add_to_cart_form, 37 } 38 return render(request, 'ecapp/detail.html', context)

試したこと

name="in_cart"のボタンを押したときは上手くいくのですが、name="buy_now"のボタンを押すと上記のエラーが出ます。

NoReverseMatch: Reverse for 'detail' with arguments '('',)' not found.

とありますが、name="buy_now"のボタンを押して、どうして引数'('',)'でdetail関数が呼ばれるのか分かりません。
また、どうしたらこのエラーは解消されますか?

必要であれば他の部分のソースコードものせます。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

どこかに、
<a href="{% url 'detail' %}">~</a>
みたいなのがあるのでは?
detail.htmlって書かれているものだけですか?全体を見せてください。
あとcart.htmlを見せてください。

投稿2020/06/07 01:09

編集2020/06/07 01:18
ForestSeo

総合スコア2720

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

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

shun173

2020/06/07 01:21 編集

回答ありがとうございます。 おっしゃる通り、cart.htmlにそのような記述があり、削除したところ上手くいきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問