Django项目中get_absolute_url始终指向同一订单ID的修复求助
问题排查:订单详情链接始终指向固定ID的修复方案
我一眼就看出问题出在你的模板代码里了!你在遍历已支付订单(success)的时候,又嵌套了一个所有订单(orders)的循环,这就导致每个订单卡片里的"View Details"链接都会被最后一个order的ID覆盖,所以不管点哪个订单,都会跳转到最后一个订单的详情页。
问题代码分析
看你这段HTML代码:
{% for od in success %}
...
{% for order in orders %}
View Details
{% endfor %}
...
{% endfor %}
这里的内层循环{% for order in orders %}完全是多余的——你已经在遍历success里的每个订单od了,直接用当前的od生成链接就好,不需要再遍历所有订单。
修复后的代码
1. 修正HTML模板
<div class="col-md-9"> {% for od in success %} <div class="card mb-3" style="max-width: 540px;"> <div class="row no-gutters"> <div class="col-md-3"> <img alt="product img" class="card-img" src="..."> </div> <div class="col-md-9"> <div class="card-body" style="position: relative;"> <h5 class="card-title">Product {{ od.id }}</h5> <!-- 去掉多余的orders循环,直接用当前的od生成链接 --> <a href="{{ od.get_absolute_url }}" style="position: absolute; top: 5px; right: 5px;"> View Details </a> <p class="card-text"> <mark style="color: whitesmoke; background-color: brown;border-radius: 3px;font-weight: bold;">{{transaction}}</mark> </p> <p class="card-text"><small class="text-muted">Delivered at {{od.reference_id}}</small></p> </div> </div> </div> </div> {% endfor %} </div>
2. 优化视图代码(可选但推荐)
你的order_list视图里传递了orders变量,但用户的订单列表页面只需要展示当前用户的订单,这个orders变量(所有订单)完全没必要传递,还容易引发类似错误,建议删掉:
def order_list(request): current_user = request.user success = Order.objects.filter(user=current_user.id, paid=True) fail = Order.objects.filter(user=current_user.id, paid=False) return render(request, 'orders/order/order_list.html', { 'success': success, 'fail': fail, 'current_user': current_user, # 移除多余的orders变量 })
修复效果
这样修改后,每个订单卡片的详情链接就会正确指向当前订单的ID,不会再出现固定指向某一个订单的问题了。
内容的提问来源于stack exchange,提问作者Adeyemo Toluwanimi
相关产品推荐
相关产品推荐

