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

Django中SweetAlert2弹窗问题:redirect重定向时失效求助

解决Django重定向时SweetAlert2弹窗失效的问题

问题核心

重定向时Django的messages会暂存到session中,但你的模板写法存在两个关键问题:

  • SweetAlert2的CDN脚本在messages循环内重复引入,易引发脚本加载冲突
  • 未处理消息内容的转义,若消息包含特殊字符会直接打断JS执行

修复步骤

1. 调整脚本引入位置

把SweetAlert2的CDN移到messages循环外,确保页面仅加载一次脚本,比如放在HTML的<head>标签内或<body>末尾:

<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script>

2. 验证Django中间件配置

确保settings.py中已启用messages框架依赖的核心中间件:

MIDDLEWARE = [
    # 其他中间件...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # 其他中间件...
]

默认情况下消息使用session存储,无需额外修改配置;若使用缓存存储需提前配置对应缓存后端。

3. 优化模板消息渲染代码

添加escapejs过滤器处理消息内容的转义,避免特殊字符导致JS报错,同时移除循环内的重复脚本引入:

{% for message in messages %}
    {% if message.tags == 'success' %}
    <script>
        Swal.fire(
            'good',
            '{{ message|escapejs }}',
            'success'
        )
    </script>
    {% endif %}
{% endfor %}

4. 可选:统一消息触发逻辑

若需要更灵活的控制,可以把弹窗逻辑封装成独立函数:

<script>
    function showSwalAlert(title, text, icon) {
        Swal.fire(title, text, icon);
    }
</script>

{% for message in messages %}
    {% if message.tags == 'success' %}
    <script>showSwalAlert('good', '{{ message|escapejs }}', 'success');</script>
    {% endif %}
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:50:36