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

Django表单提交后如何重定向回同一页面?附相关功能代码示例

Django表单提交后重定向回同一页面解决方案

你当前的问题主要是逻辑分散、模板变量冲突、缺少必填的csrf校验,按以下步骤修改即可:

1. 核心逻辑调整(views.py)

建议将时间段提交逻辑合并到页面渲染视图view_available_food中,避免多路由维护:

@login_required
def view_available_food(request):
    # 保留你原有获取food对象的逻辑,比如:
    # food = FoodAvail.objects.get(author=request.user)
    
    # 初始化时间段表单
    time_slot_form = TimeSlotForm()
    # 处理POST提交请求
    if request.method == "POST":
        if not check_existing_timeslot(request):
            data = request.POST.copy()
            data["time_slot_owner"] = request.user
            time_slot_form = TimeSlotForm(data)
            if time_slot_form.is_valid():
                time_slot_form.save()
                # 提交成功直接重定向到当前页面路由
                return redirect("food_avail:view_food_avail_res")
        else:
            # 注意你原有代码这里打印内容写反了,已存在才进入else分支
            messages.info(request, "时间段已存在")
    
    # 获取当前用户已添加的所有时间段,用于列表展示
    user_time_slots = TimeSlot.objects.filter(time_slot_owner=request.user)
    return render(request, "food_avail/view_food.html", {
        "food": food, # 保留原有food变量传递
        "time_slot_form": time_slot_form,
        "time_slot_list": user_time_slots
    })

修改后可以删除原来单独的post_available_timeslots视图。

2. 模板修复(HTML)

2.1 表单部分添加csrf校验,替换表单变量

<form method="post">
    {% csrf_token %} <!-- Django POST请求必须加的csrf校验标签 -->
    {{ time_slot_form.as_p }}
    <button type="submit" class="button btn-success">提交</button>
</form>

2.2 时间段列表部分替换变量,避免冲突

{% if time_slot_list %}
<h4>已添加的时间段列表</h4>
</div>
<div class="card-body">
    <div class="table-responsive">
        <table class="table table-hover ">
            <thead>
                <tr>
                    <th>开始时间</th>
                    <th>结束时间</th>
                    <th>编辑</th>
                    <th>删除</th>
                </tr>
            </thead>
            <tbody>
                {% for x in time_slot_list %}
                <tr>
                    <td>{{x.start_time | time:'H:i:s'}}</td>
                    <td>{{x.end_time | time:'H:i:s'}}</td>
                    <td><!-- 后续自行补充编辑按钮逻辑 --></td>
                    <td><!-- 后续自行补充删除按钮逻辑 --></td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
    </div>
</div>
{% endif %}

3. 路由配置(urls.py)

不需要额外调整原有路由,保持food_avail_res路由指向修改后的view_available_food视图即可。

修改完成后,表单提交成功会自动重定向回当前页面,同时加载最新的时间段列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:04