使用 PK <int:pk> 将 django 反向到 url

Posted

技术标签:

【中文标题】使用 PK <int:pk> 将 django 反向到 url【英文标题】:Have a django reverse to a url with PK <int:pk> 【发布时间】:2021-01-12 14:22:11 【问题描述】:

我正在关注 This 使用 PayPal 设置付款的教程

我的问题在于 paypal_dict,因为它包含这个

paypal_dict = 
...
'return_url': 'http:///'.format(host,
                                           reverse('payment_done')),
...

而且我的 payment_done URL 需要有一个交易本身的 id,我不知道我怎么能在这个里面有一个 pk 这是我的完整 URLs.py

...
# Payment
    path('payment/process/<int:trade_id>/', payment_views.payment_process, name="payment_process"),
    path('payment/done/<int:trade_id>/', payment_views.payment_done, name="payment_done"),
...

我的完整流程_paypal

def payment_process(request, trade_id):
    trade = get_object_or_404(Trade, id=trade_id)
    host = request.get_host()

    paypal_dict = 
        'business': settings.PAYPAL_RECEIVER_EMAIL,  # todo WHO TO PAY
        'amount': Decimal(trade.price),
        'item_name': trade.filename,
        'invoice': str(trade.id),
        'currency_code': 'USD',
        'notify_url': 'http://'.format(host,
                                           reverse('paypal-ipn')),
        'return_url': 'http:///'.format(host,
                                           reverse('payment_done')),
        'cancel_return': 'http://'.format(host,
                                              reverse('home')),
    

    form = PayPalPaymentsForm(initial=paypal_dict)
    return render(request, 'payment/payment_process.html', 'trade': trade, 'form': form)

【问题讨论】:

【参考方案1】:

您可以使用argskwargs 在您的网址中传递trade_id

paypal_dict = 
...
'return_url': 'http://'.format(host,
      reverse('payment_done', kwargs='trade_id': trade.id)),
...

docs ref

【讨论】:

它给了我格式索引超出范围之类的东西,所以我不得不把 *reverse 而不是 reverse,谢谢你的帮助。我的项目终于准备好走向世界了:)

以上是关于使用 PK <int:pk> 将 django 反向到 url的主要内容,如果未能解决你的问题,请参考以下文章

在我的 jinja2 模板中使用 url 作为变量?

drf——登录功能认证权限频率组件(Django转换器配置文件作用)

与 Django 通用视图中的 pk 不同的 url 路径

SQL - 避免额外的 GROUP BY(并提高查询性能)

如何在 SQL 中基于多个“标签”查询数据?

SQL 服务器:使用 select 和其他参数插入