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

用户提交博客文章后如何重定向至主页?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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:05:34