HTML模板正常,但支付页面重定向功能异常求助
支付页面跳转失效问题排查
我的HTML模板运行正常,但提交订单后跳转到支付页面的功能无法正常工作,相关Django视图代码如下:
from django.shortcuts import render, redirect, HttpResponse from carts.models import CartItem from .forms import OrderForm import datetime from .models import Order # Create your views here. def payments(request): return render(request, 'orders/payments.html') def place_order(request, total=0, quantity=0,): current_user = request.user cart_items = CartItem.objects.filter(user=current_user) cart_count = cart_items.count() if cart_count <= 0: return redirect('storx') delivery_charge = 40 grand_total = 0 tax = 0 for cart_item in cart_items: total += (cart_item.product.price * cart_item.quantity) quantity += cart_item.quantity tax = (2 * total)/100 grand_total = total + tax + delivery_charge if request.method == 'POST': form = OrderForm(request.POST) if form.is_valid(): data = Order() data.user = current_user data.first_name = form.cleaned_data['first_name'] data.last_name = form.cleaned_data['last_name'] data.phone = form.cleaned_data['phone'] data.email = form.cleaned_data['email'] data.address_line_1 = form.cleaned_data['address_line_1'] data.address_line_2 = form.cleaned_data['address_line_2'] data.country = form.cleaned_data['country'] data.state = form.cleaned_data['state'] data.city = form.cleaned_data['city'] data.zipcode = form.cleaned_data['zipcode'] data.order_note = form.cleaned_data['order_note'] data.order_total = grand_total data.tax = tax data.delivery_charge = delivery_charge data.ip = request.META.get('REMOTE_ADDR') data.save() yr = int(datetime.date.today().strftime('%Y')) dt = int(datetime.date.today().strftime('%d')) mt = int(datetime.date.today().strftime('%m')) d = datetime.date(yr,mt,dt) current_date = d.strftime("%Y%m%d") # 20230214 order_number = current_date + str(data.id) data.order_number = order_number data.save() order = Order.objects.get(user=current_user, is_ordered=False, order_number=order_number) context = { 'order': order, 'cart_items': cart_items, 'total': total, 'tax': tax, 'delivery_charge': delivery_charge, 'grand_total': grand_total, } return render(request, 'orders/payments.html', context) else: return redirect('checkout')
排查方向
- 表单验证失败:如果
form.is_valid()返回False,代码会直接跳过内部逻辑,回到else分支重定向到checkout页面。可以在if form.is_valid()前加print(form.errors)或者在模板中显示错误信息,排查是否存在字段缺失、格式不符合要求等问题。 - 订单查询异常:
Order.objects.get(...)如果找不到匹配的订单,会抛出DoesNotExist异常,导致页面崩溃而非跳转。可以添加try-except捕获异常,或者确认Order模型的is_ordered字段默认值是否为False(刚创建的订单应处于未下单状态)。 - 路由配置问题:检查
payments视图的URL配置是否正确,确保URL名称与视图映射无误。另外,当前代码是直接render支付页面而非redirect,如果需要重定向跳转,需改为redirect('payments'),并将订单信息存入session,在payments视图中取出传递给模板。 - 模板或上下文问题:如果直接render后页面未正常加载,检查
payments.html是否在orders目录下,以及模板中是否正确使用了传递的上下文变量(如{{ order.order_number }})。
内容的提问来源于stack exchange,提问作者samrat ghosh
相关产品推荐
相关产品推荐

