Django传入外键int路径参数时出现404错误求助
解决Django路径参数导致的404错误
核心问题:URL路径参数语法错误
你的urls.py中路径参数的写法存在错误,将<和>转义成了<和>,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
相关产品推荐
相关产品推荐

