用户提交博客文章后如何重定向至主页?Django新手求助
Django表单提交后重定向问题解决方法
核心问题分析
你的问题主要出在两个地方:
success视图的重定向写法错误,直接传入模板文件名而非有效URL/URL名称- 缺少URL命名空间配置,导致
redirect("blog:success")可能无法正确匹配
1. 修复success视图的重定向逻辑
当前success视图中HttpResponseRedirect("home.html")是错误用法,Django的重定向函数需要接收URL路径或URL名称,而非模板文件名。修改如下:
# views.py def success(request): # 直接跳转到名为home的URL路由 return redirect('home')
如果你的项目配置了app命名空间(推荐),可以写成return redirect('blog:home'),下文会说明命名空间配置方法。
2. 配置URL命名空间(可选但推荐)
你的app urls.py未设置命名空间,导致redirect("blog:success")可能找不到对应路由。在app的urls.py顶部添加命名空间声明:
# urls.py from . import views from django.urls import path, include from .views import * # 添加命名空间,与redirect中的"blog:"对应 app_name = 'blog' urlpatterns = [ path('', views.postslist.as_view(), name='home'), path('blog_post/', views.blog_post, name='blog_post'), path('success/', views.success, name='success'), path('<slug:slug>/', views.postdetail.as_view(), name='post_detail'), ]
3. 优化blog_post视图的表单逻辑(可选)
当前视图不管表单是否验证通过都会重定向,建议仅在表单验证成功后才跳转,失败则留在表单页显示错误:
# views.py def blog_post(request): form = PostForm(request.POST or None) if request.method == "POST": if form.is_valid(): form.instance.user = request.user form.save() # 仅验证通过时重定向 return redirect("blog:success") # 验证失败或GET请求时,渲染表单页面 context = {'form': form} return render(request, "create_post.html", context)
问题根源解释
之前提交后出现空白页面,是因为HttpResponseRedirect("home.html")会跳转到/success/home.html这个不存在的路径,而你的URL配置中最后一条<slug:slug>/会把home.html当作slug参数,匹配到postdetail视图,但找不到对应文章,因此返回空白页面。
内容的提问来源于stack exchange,提问作者jakemcp97
相关产品推荐
相关产品推荐

