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

Django传入外键int路径参数时出现404错误求助

解决Django路径参数导致的404错误

核心问题:URL路径参数语法错误

你的urls.py中路径参数的写法存在错误,将<和>转义成了&lt;和&gt;,Django无法识别这种格式的路径参数,导致请求的URL无法匹配到对应视图,从而返回404。

修正后的urls.py代码:

from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('', views.blog, name='Blog'),
    path('categoria/<int:categoria_id>/', views.categoria, name="categoria")
]

其他需要检查的点

  • 确认项目根URL配置
    确保项目根目录下的urls.py已包含blog应用的URL配置,示例如下:

    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('blog/', include('blog.urls'))  # 必须包含该行
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    若缺少该行,/blog/开头的路径无法路由到blog应用的视图,同样会返回404。

  • 验证数据库中存在对应数据
    确保Sqlite3数据库中存在id=1的Categoria实例,可通过Django shell验证:

    python manage.py shell
    

    执行以下代码:

    from blog.models import Categoria
    Categoria.objects.filter(id=1).exists()
    

    若返回False,需先创建对应分类数据(不过此情况会触发服务器错误而非404,优先级低于路径问题)。

  • 优化视图异常处理
    为避免分类不存在导致的服务器错误,建议用get_object_or_404替代get,这样分类不存在时会返回404,更符合预期:

    from django.shortcuts import render, get_object_or_404
    from blog.models import Post, Categoria
    
    def categoria(request, categoria_id):
        categoria = get_object_or_404(Categoria, id=categoria_id)
        posts = Post.objects.filter(categorias=categoria)
        return render(request, "blog/categoria.html", {'categoria': categoria, "posts":posts })
    

内容的提问来源于stack exchange,提问作者Raúl Gallardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:40:37