hiramatsu0415
@hiramatsu0415

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Djangoでのエラーについて Reverse for '~' with no arguments not found. 1 pattern(s) tried: ['~']

Q&A

Closed

解決したいこと

Reverse for 'pay' with no arguments not found. 1 pattern(s) tried: ['SellText/pay/(?P[0-9]+)$']
このようなエラーが出てしまいます。

urls.pyにはきちんとint:idをつけてあり、
htmlでも{% url '~' id %}と書いてあります。

発生している問題・エラー

Reverse for 'pay' with no arguments not found. 1 pattern(s) tried: ['SellText/pay/(?P<product_buy_id>[0-9]+)$']

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

views.py
class PayView(View):
  # public_key = os.environ['PAYJP_PUBLIC_KEY']
  payjp.api_key = os.environ['PAYJP_SECRET_KEY']
  public_key =os.environ['PAYJP_PUBLIC_KEY']
  print('1')


  def get(self, request, product_buy_id):
    print('2')
    product = get_object_or_404(Product, id=product_buy_id)
    print('3')
    # amount=1000
    amount=product.price
    print(amount)
    context ={
      # 'amount':self.amount,
      'amount':amount,
      'public_key':self.public_key,
    }
    print('4')
    return render(request,'pay.html',context)

  def post(self, request,product_buy_id):
    print('3')
    product = get_object_or_404(Product, id=product_buy_id)
    amount=product.price
    customer = payjp.Customer.create(
      email='example@pay.jp',
      card = request.POST.get('payjp-token')
    )
    charge = payjp.Charge.create(
      # amount=self.amount,
      amount=amount,
      currency='jpy',
      customer=customer.id,
      description='支払いテスト',
    )
    context ={
      'amount':self.amount,
      'public_key':self.public_key,
      'charge':charge,
    }
    return render(request,'pay.html',context) 
urls.py
path('buy_screen/<int:id>', views.buy_screen, name='buy_screen'),
path('pay/<int:product_buy_id>',views.PayView.as_view(),name='pay'),

pay.html
{% extends 'base.html' %}
{% block content %}
<br>
<br>
  <main class="container">
    <div class="row">
      <div class="col-md-8 mb-4">
        <h3 class ="bp-4 mb-4 font-italic border-bottom display-5">
           決済ページ
        </h3>

        {% if charge %}

        <p>ブランド: {{charge.card.brand}}</p>
        <p>****-****-****-{{charge.card.last4}}</p>
        {%endif%}

        <form action="{% url 'SellText:pay' %}"  method="post">
          {% csrf_token %}
          <article>
            <label>1000円のお支払い</label>
          </article>

          <script type="text/javascript"
            src="https://checkout.pay.jp"
            class="payjp-button"
            data-key="{{ public_key }}">
          </script>
        </form>
      </div>

    </div>

  </main>
  {% endblock %}
buy_screen.html
{% extends 'base.html' %}
{% block content %}
<style>
  body{background-color:lightgray ;}
  .container{background-color:white;}
</style>
<br>
<br>

<div class="container" >
  <br>
  <h1 class="text-center">購入内容の確認</h1>
<hr>
 <div class="row">
   <div class="col-md-4  col-sm-4 offset-sm-1 offset-md-1">
  <img  src={{ product_item.product_picture1.url }} style="height:100px;width:100px;" >
</div>
<div class="col-md-4 col-sm-4 ">
<h3 >{{product_item.product_name}}</h3><h3>{{product_item.price}} 円</h3>
</div>

</div>
<br>
<hr>
<div class="row">
  <div class="col-md-4 col-sm-4 offset-sm-3 offset-md-3">
     <h3>支払い金額</h3>
  </div>
  <div class="col-md-4 col-sm-4 ">
    <h3>{{product_item.price}} 円</h3>
  </div>
</div>
<br>
<hr>
<div class="row">
  <div class="col-md-4 col-sm-4 offset-sm-3 offset-md-3">
     <h3>受け取り場所</h3>
  </div>
  <div class="col-md-4 col-sm-4 ">
    <h3>{{product_item.place}} </h3>
  </div>
</div>
<br>
<hr>
<div class="row">
  <div class="col-md-4 col-sm-4 offset-sm-3 offset-md-3">
     <a href="{% url 'SellText:pay' product_buy_id=product_item.id %}"><h3>支払いページへ</h3></a>



  </div>
  <div class="col-md-4 col-sm-4 ">
  </div>
</div>


</div>
<br>
<br>
{% endblock %}

自分で試したこと

htmlにprint関数を使い、どこまで処理が進んでいるかを確かめたところ、returnの前まできちんと処理されておりました。 1500というのは商品の値段であり、こちらも正しい値です。
スクリーンショット 2021-05-23 21.43.40.png

どうぞよろしくお願い申し上げます。

0

2Answer

PayViewのgetまでたどり着いてるという事は、pay.htmlのレンダリングはうまくいってるのではないでしょうか?
pay.htmlに貼られているaタグのリンクで、パラメータを正しく設定出来てないURLがある可能性はないでしょうか?

ちなみに、printの中を数字にする場合は、文字列にしなくてもいけますよ。
print(1)

2Like

Comments

  1. @hiramatsu0415

    Questioner

    お世話になっております。
    pay.htmlとそのページにいくためのリンクが貼ってあるbuy_screen.htmlのコード、urls.pyをアップいたしました。pay.htmlには<a>リンクはないのですが、PAY.JPのURLが貼っております。

    商品一覧→商品詳細→購入確認ページ→購入ページの順であり、購入確認ページがbuy_screen.htmlで、購入ページがpay.htmlです。

    print(1)の件誠にありがとうございます。
    次回から使わさせていただきます。

pay.htmlに、<form action="{% url 'SellText:pay' %}" method="post">という記述がありますが、urlの引数が不足しているのではないでしょうか?

1Like

Your answer might help someone💌