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

如何在Django中实现同页弹出404错误提示不跳转页面

问题根因

Http404是Django内置的异常类,抛出后会自动触发全局404页面跳转逻辑,无法停留在当前页。而messages无输出一般是两个原因:一是没有在模板中渲染messages变量,二是异常处理后没有返回当前页的渲染响应,导致messages无法被传递到前端。

修复方案

第一步:调整视图层代码

不要抛出Http404,改为捕获指定异常后添加错误消息,再返回当前页的渲染结果:

from django.contrib import messages

if request.method == "POST":
    username = request.POST.get("username")
    password = request.POST.get("password")
    try:
        user = FoodRedistributor.objects.get(name=username)
        # 此处保留你原本的账号校验、业务逻辑代码
    except FoodRedistributor.DoesNotExist:
        # 仅捕获模型不存在的指定异常,避免吞掉其他类型的报错
        messages.error(request, "No food redistributor matches the given query.")
        # 替换为你当前页对应的模板路径,返回当前页渲染结果传递消息
        return render(request, "your_current_page_template.html", locals())

第二步:配置模板渲染逻辑

首先确认settings.py中messages相关配置正常:

  • MIDDLEWARE列表中存在django.contrib.messages.middleware.MessageMiddleware
  • TEMPLATES对应配置的上下文处理器列表中存在django.contrib.messages.context_processors.messages

然后在当前页的HTML模板中添加如下代码,实现自动弹窗提示:

{% if messages %}
<script>
{% for msg in messages %}
// 可替换为项目中使用的其他UI提示组件,比如Toast、Message等
alert("{{ msg|escapejs }}");
{% endfor %}
</script>
{% endif %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:15:03