You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:35:39