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

访问product/路径出现404错误,疑似数据库查询引发页面加载异常

问题分析与解决

核心问题拆解

  1. 路由匹配异常:访问product/时,当前urls.py中没有直接匹配该路径的规则,请求会落到最后一条<int:pk>/路由。由于product不是整数格式,ProductUpdateView会抛出404,再加上视图里的全局try-except捕获了所有异常,最终返回404页面。
  2. 模板渲染关联的数据库查询问题:移除上下文里的products_all后页面恢复正常,说明问题出在模板products/product.html对data(即products_all这个QuerySet)的渲染过程中——比如模板语法错误、调用了不存在的字段/方法等,这些异常被全局except捕获,触发了Http404。

分步解决

1. 修正路由规则

为product/路径添加明确的路由匹配,避免请求误落到其他路由:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.product, name='products-page'),
    path('product/', views.product, name='products-page'),  # 新增:匹配product/路径
    path('add-product', views.ProductAddView.as_view(), name='add-product'),
    path('<int:pk>/delete/', views.ProductDeleteView.as_view(), name='product-delete'),
    # path('product/<int:id>', views.product_detail, name='product-detail-page'),
    # path('product/<int:pk>', views.SingleProductView.as_view(), name='product-detail-page'),
    path('<int:pk>/', views.ProductUpdateView.as_view(), name='product-update'),
]

2. 定位模板真实错误

全局except会掩盖真正的错误原因,先修改视图移除全局捕获,让Django展示详细错误栈:

# views.py
def product(request):
    products_all = Product.objects.all()
    num_products = products_all.count()
    product_dict = {
        "data": products_all,
        "total": num_products
    }
    return render(request, 'products/product.html', context=product_dict)

重新访问页面后,根据错误提示找到模板中处理data时的具体问题(比如字段拼写错误、非法方法调用等),针对性修复。

3. 优化异常处理(可选)

如果需要保留异常处理,不要捕获所有异常,只针对数据库相关的特定异常捕获,避免掩盖模板错误:

from django.db import DatabaseError

def product(request):
    try:
        products_all = Product.objects.all()
        num_products = products_all.count()
        product_dict = {
            "data": products_all,
            "total": num_products
        }
        return render(request, 'products/product.html', context=product_dict)
    except (Product.DoesNotExist, DatabaseError):
        raise Http404()

总结

  • 先添加product/的明确路由,解决路由误匹配问题;
  • 移除全局异常捕获,定位模板渲染的具体错误;
  • 根据错误提示修复模板,或调整异常处理逻辑。

内容的提问来源于stack exchange,提问作者belmar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:15:27