Django博客应用访问/blog/about出现404错误求助
Django 404错误:/blog/about路径无法访问
问题详情
创建博客应用时,访问http://127.0.0.1:8000/blog/about返回404错误,报错信息如下:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/blog/about
Using the URLconf defined in django_project.urls, Django tried these URL patterns, in this order:admin/
blog/ [name='blog-home']
当前路径blog/about与任何URL模式都不匹配。
相关代码文件如下:
views.py
from django.shortcuts import render from django.http import HttpResponse def home(request): return HttpResponse('<h1>Blog home</h1>') def about(request): return HttpResponse('<h1>Blog About</h1>')
博客应用内的urls.py
from django.urls import path from . import views urlpatterns = [ path('', views.home, name='blog-home'), path('about/', views.about, name='blog-about'), ]
项目根目录的urls.py
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('blog/', include('blog.urls')), ]
问题原因
Django的路由匹配是精确匹配的:
- 项目根路由将
blog/路径转发给博客应用的路由 - 博客应用内的about路由定义为
about/(带末尾斜杠),对应的完整可访问路径是/blog/about/ - 你访问的
/blog/about不带末尾斜杠,和定义的路由模式不匹配,因此返回404。
解决方法
方法1:访问正确的URL
直接访问带末尾斜杠的地址:http://127.0.0.1:8000/blog/about/
方法2:修改路由兼容不带斜杠的请求
修改博客应用内的urls.py,可以选择以下两种方式:
方式A:添加两条路由规则
urlpatterns = [ path('', views.home, name='blog-home'), path('about/', views.about, name='blog-about'), path('about', views.about), # 新增该行,匹配不带斜杠的请求 ]
方式B:使用正则路由同时匹配带/不带斜杠
from django.urls import path, re_path from . import views urlpatterns = [ path('', views.home, name='blog-home'), re_path(r'about/?$', views.about, name='blog-about'), # ?表示斜杠可选 ]
方法3:确保自动重定向功能开启
检查项目settings.py中的APPEND_SLASH配置,确保其值为True(默认即为True):
APPEND_SLASH = True
开启后,Django会自动将不带斜杠的URL重定向到带斜杠的版本,无需修改路由。
内容的提问来源于stack exchange,提问作者Pandey
相关产品推荐
相关产品推荐

