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

Django博客项目问题:存在博客但访问blog/1仍返回404错误

排查步骤与解决方案

看起来你遇到了Django URL路由的典型问题——明明预期能匹配的路径却返回404。咱们一步步拆解排查:

1. 先补全并修正根目录urls.py的路由配置

你当前的根urls.py代码没写完,这是路由的入口,必须确保正确包含blog应用的路由规则。修改后的代码应该是这样:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    # 关键:把所有blog/开头的请求转发给blog应用的路由处理
    path('blog/', include('blog.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

如果之前你写的是path('', ...)而没有指定blog/前缀,那访问blog/1自然找不到匹配的路由。

2. 检查blog应用的urls.py(核心环节!)

你需要在blog应用目录下创建urls.py(如果还没有的话),并定义带主键参数的路由规则:

from django.urls import path
from . import views

urlpatterns = [
    # 匹配blog/1、blog/2这类路径,<int:pk>是Django的路径转换器,会把URL里的数字转成整数参数
    path('<int:pk>/', views.blog_detail, name='blog_detail'),
    # 可选:添加博客列表页路由
    # path('', views.blog_list, name='blog_list'),
]

这里的<int:pk>是关键,它告诉Django提取URL中的整数部分作为pk参数传递给视图函数。

3. 确认视图函数正确处理参数

你的blog/views.py中的详情视图需要正确接收pk参数,并在博客不存在时返回404:

from django.shortcuts import render, get_object_or_404
from .models import Blog  # 假设你的博客模型是Blog

def blog_detail(request, pk):
    # 用get_object_or_404可以自动在对象不存在时返回404,比手动try-except更简洁
    blog = get_object_or_404(Blog, pk=pk)
    return render(request, 'blog/blog_detail.html', {'blog': blog})

如果视图没有接收pk参数,或者查询条件错误(比如误用了其他字段而非pk),也会导致无法返回正确内容。

4. 验证数据库中是否存在pk=1的博客

有时候我们误以为有数据,但实际数据库里并没有。可以通过两种方式验证:

  • 访问/admin/,进入Blog模型管理页面查看是否有第一条数据;
  • 在终端运行python manage.py shell,执行以下代码:
from blog.models import Blog
# 返回True说明存在,False说明需要先创建测试数据
Blog.objects.filter(pk=1).exists()

如果返回False,那访问blog/1返回404是正常的,需要先添加测试博客。

5. 检查路由顺序是否冲突

Django的路由是从上到下匹配的,如果根urls.py里有其他和blog/前缀冲突的路径,会优先匹配前面的。确保path('blog/', include('blog.urls'))放在其他可能冲突的路由前面。

按照上面的步骤逐一排查,应该就能解决访问blog/1返回404的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:56:08