前提・実現したいこと
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関数が呼ばれるのか分かりません。
また、どうしたらこのエラーは解消されますか?
必要であれば他の部分のソースコードものせます。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/07 01:21 編集