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

Django创建按钮发送POST请求后无法跳转至表单的问题

Django在线日志系统创建提交后无法跳转问题排查

核心问题分析

点击创建按钮发送POST请求后无法跳转,主要存在以下关键问题:

1. 模板表单变量名不匹配

create.html中使用{{ form.as_p }}渲染表单,但make_entry视图传递给模板的上下文变量是entry而非form。这会导致表单无法正确渲染,且提交后即使数据验证失败,也看不到错误提示,容易误以为页面未跳转。

2. 表单验证失败无错误反馈

当POST请求的表单数据不符合模型规则(如必填字段为空、文件格式不合法等),视图会重新渲染创建页面,但模板未配置错误信息展示,无法直观判断问题原因。

3. 其他潜在代码错误

  • delete_entry视图中上下文变量错误:'object':object里的object未定义,应改为'object':entry
  • urls.py部分路径缺少末尾斜杠,虽Django会自动重定向,但规范写法建议补充

修复步骤

步骤1:修正模板变量名并添加错误反馈

修改create.html代码,替换表单变量名并增加错误信息显示:

{% extends 'ejournal/base.html' %}
{% block content %}
    <div class="center_journal">
        <h1> Create Journal Entry </h1>
    </div>
    <div class="center_journal">
        <form method="POST" enctype="multipart/form-data">
            {% csrf_token %}
            <p>{{ entry.as_p }}</p>
            <!-- 显示表单验证错误 -->
            {% if entry.errors %}
                <div class="alert alert-danger">
                    {% for field in entry %}
                        {% for error in field.errors %}
                            <p>{{ field.label }}: {{ error }}</p>
                        {% endfor %}
                    {% endfor %}
                    {% for error in entry.non_field_errors %}
                        <p>{{ error }}</p>
                    {% endfor %}
                </div>
            {% endif %}
            <button class="btn btn-primary" type="submit">CREATE</button>
        </form>
    </div>
{% endblock content %}

步骤2:修正delete_entry视图的上下文错误

修改views.py中的delete_entry函数:

def delete_entry(request, id):
    entry = get_object_or_404(Journal, id=id)
    if request.method == "POST":
        entry.delete()
        return redirect('list_journals')
    context = {
        'object': entry  # 修正未定义的object变量
    }
    return render(request, 'journal/delete.html',context)

步骤3:规范URL路径(可选)

修改urls.py补充路径末尾斜杠,符合Django规范:

urlpatterns = [
    path('create/', make_entry, name="make_entry"),
    path('list_journals/', list_journals, name="list_journals"),
    path('delete/<int:id>/', delete_entry, name="delete_entry"),
    path('journal_detail/<int:id>/',journal_detail, name="journal_detail"),
]

验证方法

  1. 重启Django服务器
  2. 访问创建页面,提交不完整数据,此时会显示具体错误提示
  3. 填写符合要求的完整数据(所有必填字段、合法格式文件),提交后将成功跳转到日志列表页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:35:48