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

Django访问/blog/blogpost路径报404 Page not found错误

Django访问/blog/blogpost返回404问题修复

问题现象

  • 完成博客模块路由、视图、模型代码编写后,访问/blog/blogpost触发404 Page not found错误
  • 服务端日志输出:
Not Found: /blog/blogpost
[21/Jun/2022 12:29:33] "GET /blog/blogpost HTTP/1.1" 404 2678
  • 报错页面截图:
    页面输出的错误截图

现有代码

路由配置(Urls.py)

urlpatterns = [
    path("", views.index, name="blogHome"),
    path("blogpost/<int:id>/", views.blogpost, name="blogHome")
]

视图代码(Views.py)

django.shortcuts import render
from .models import Blogpost

# Create your views here.

def index(request):
    return render(request, 'blog/index.html')

def blogpost(request, id):
    post.Blogpost.objects.filter(post_id = id)[0]
    print(post)
    return render(request, 'blog/blogpost.html')

模型代码(Models.py)

from django.db import models

class Blogpost(models.Model):
    post_id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=50)
    head0 = models.CharField(max_length=500, default="")
    chead0 = models.CharField(max_length=10000, default="")
    head1 = models.CharField(max_length=500, default="")
    chead1 = models.CharField(max_length=10000, default="")
    head2 = models.CharField(max_length=500, default="")
    chead2 = models.CharField(max_length=10000, default="")
    pub_date = models.DateField()
    thumbnail = models.ImageField(upload_to='blog/images', default="")

    def __str__(self):
        return self.title

问题根因

  1. 路由不匹配:当前配置的blogpost路由强制要求传入整数类型的id路径参数,且路径末尾带斜杠,合法匹配格式为/blog/blogpost/<整数id>/,直接访问无参数的/blog/blogpost没有对应路由规则,直接返回404。
  2. 代码存在多处运行时错误,即便路由匹配成功也无法正常响应:
    • 视图文件第一行缺少from关键字,导入render的写法错误
    • 查询博客对象的语句没有赋值给post变量,直接写post.Blogpost.objects.filter(...)会抛出变量未定义、类调用方式错误的异常
    • 两个路由的name参数重复定义为blogHome,后续反向解析路由会出现冲突
    • 直接用下标[0]取filter查询结果,当对应id的文章不存在时会触发索引越界异常

修复步骤

  1. 修正路由配置:
    两个路由不要使用重复的name值,如果需要访问博客详情页,访问路径必须携带对应文章id,例如访问id为1的文章地址为/blog/blogpost/1/。如果需要兼容不带斜杠、不带id的访问逻辑,可以新增对应路由规则,参考配置:
urlpatterns = [
    path("", views.index, name="blogHome"),
    path("blogpost/<int:id>/", views.blogpost, name="blogPost"),
]
  1. 修复视图层代码:
# 补全正确的导入语句
from django.shortcuts import render, get_object_or_404
from .models import Blogpost

def index(request):
    return render(request, 'blog/index.html')

def blogpost(request, id):
    # 修正变量赋值,用get_object_or_404自动处理文章不存在的404逻辑
    post = get_object_or_404(Blogpost, post_id=id)
    print(post)
    # 将查询到的文章对象传入模板上下文
    return render(request, 'blog/blogpost.html', {"post": post})
  1. 重启Django服务后,携带合法文章id访问对应路径即可正常加载页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:31:15