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

如何在Django中实现用户自主发帖功能,解决点击创建帖子返回空白页问题

问题修复方案


1. 核心问题:URL路由匹配顺序错误

Django的路由规则是从上到下优先匹配,你把动态路径<category>/放在了固定路径post_form/前面,当你点击「Create a Post」访问post_form/时,Django会把post_form当做分类名参数传入blog_category视图,查询名称包含post_form的分类对应的帖子,没有匹配结果就会渲染出空白的分类页。
修复方案:调整urls.py中路由的顺序,把固定路径放在动态路径前面:

urlpatterns = [
    path("", views.blog_index, name="blog_index"),
    path("<int:pk>/", views.blog_detail, name="blog_detail"),
    path("post_form/", views.blog_post, name="blog_post"), # 移到<category>/前面
    path("<category>/", views.blog_category, name="blog_category"),
]

2. 发帖表单提交逻辑错误

调整路由后进入发帖页,现有表单也无法正常提交,存在两个低级错误:

  • 表单的action属性写死为/blog/,提交后不会走blog_post视图的表单处理逻辑
  • 提交按钮用了<a>标签,点击后直接跳转到首页,根本不会触发表单提交
    修复方案:修改blog_post.html的表单部分:
<form action="" method="post"> <!-- action留空表示提交到当前url -->
    {% csrf_token %}
    <div class="form-group">
        {{ post_form.title }}
    </div>
    <div class="form-group">
        {{ post_form.author }}
    </div> 
    <div class="form-group">
        {{ post_form.body }}
    </div> 
    <!-- 换成原生button提交表单 -->
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

3. 可选优化:提交成功后重定向

当前blog_post视图表单提交成功后还是渲染当前发帖页,用户刷新会重复提交表单,建议添加重定向逻辑:
先导入redirect模块:

from django.shortcuts import render, redirect

然后修改blog_post视图:

def blog_post(request):
    post_form = PostForm()
    if request.method == 'POST':
        post_form = PostForm(request.POST)
        if post_form.is_valid():
            post = Post(
                title=post_form.cleaned_data["title"],
                author=post_form.cleaned_data["author"],
                body=post_form.cleaned_data["body"],
            )
            post.save()
            return redirect('blog_index') # 提交成功直接跳转到首页
    args= {'post_form': post_form}
    return render(request, "blog_post.html", args)

额外注意

Post模型的categories字段是多对多字段,默认必填,你现在创建Post的时候没有给这个字段赋值,提交表单的时候会报错,建议要么给categories字段加blank=True允许为空,要么在发帖表单里添加分类选择项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:18:03