如何解决将 JsonResponse 数据来自 Django 视图作为 Javascript 中的 url 参数传递不起作用
我正在 django 中创建一个具有贝宝客户端支付集成的网站。我的付款工作正常,但付款完成后,我使用 fetch API 将交付数据发送到 django 视图函数,视图函数返回一个 JsonResponse。 我正在尝试将该响应中的数据作为 url 参数传递给另一个 django 视图,该视图将呈现有关订单的成功页面,其中包含一些详细信息。
我遇到的问题如下:
NoReverseMatch at /product-details/payment
使用关键字参数 '{'DATA': ''}' 反转 'order_successful'。尝试了 1 个模式:['order_successful/(?P[^/]+)$']
这里是 checkout.html 的代码,它调用了 paymentComplete.views
<script>
function completeOrder(){
var url = "{% url 'paymentComplete' %}"
fetch(url,{
method: 'POST',headers:{
'Content-type': 'application/json','X-CSRFToken': csrftoken,},body:JSON.stringify({'prodID': prodId,'quantity': quantityBought,'bill': total,'fName': fName,'lName': lName,'apt': apt,'street': street,'city': city,'state': state,'zipcode': zipcode,'country': country,'email': email,'phone': phone})
})
.then(response => response.json())
.then((data) => {
console.log('Success ',data);
console.log(typeof data);
alert('Transaction Completed');
window.location.href = "{% url 'order_successful' DATA=data %}"
})
}
</script>
以下是paymentComplete.views
的代码def paymentComplete(request):
body = json.loads(request.body)
prod_ID = int(body['prodID'])
prod_Qt_bought = int(body['quantity'])
bill_paid = str(body['bill'])
#loading product from store
prod_from_store = Product.objects.get(id=prod_ID)
#previous product quantity
previous_Qt = int(prod_from_store.left)
newLeft = previous_Qt - prod_Qt_bought
print(body)
return JsonResponse(prod_from_store.color,safe=False)
被调用的视图函数
window.location.href = "{% url 'order_successful' DATA=data %}" 是orderSuccessful.views,其代码如下:
def order_successful(request,DATA):
print(request)
return render(request,'order_successful.html',{'DATA':DATA})
我的应用程序 urls.py 供参考:
from django.urls import path
from . import views
urlpatterns = [
path('',views.home,name='home'),path('all-products',views.all_products,name='all-products'),path('request-a-quote',views.request_quote,name = 'RequestQuote'),path('contact-us',views.contact_us,name='ContactUs'),path('about',views.about,name='about'),path('product-details/<int:ID>',views.prod_temp,name='prod_temp'),path('ContactUs',views.ContactUs,name='contact-us'),path('calcQuote',views.calcQuote,name='calculate-quote'),path('product-details/purchase',views.purchase,name='purchase'),path('product-details/payment',views.payment,name='payment'),path('product-details/paymentComplete',views.paymentComplete,name='paymentComplete'),path('order_successful/<str:DATA>',views.order_successful,name='order_successful'),]
当我在 checkout.html 的下一行中传递一个硬编码的字符串而不是数据并抛出前面提到的 NoReverseMatch 错误时,它工作正常
window.location.href = "{% url 'order_successful' DATA=data %}"
感谢帮助和指导。谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。