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

如何在Django自定义500错误页面按用户组展示不同错误信息

解决方案

要实现500错误发生时,给operator组用户展示类似DEBUG=True模式下的回溯信息,同时给client组用户展示常规自定义错误页面,你需要创建一个自定义的500错误处理视图,通过检查用户所属组来渲染不同内容。具体步骤如下:

步骤1:创建自定义500视图

在你的应用的views.py中,添加一个自定义视图,用于捕获异常详情并判断用户组:

import sys
import traceback
from django.shortcuts import render

def custom_500(request):
    # 获取异常和回溯信息
    exc_type, exc_value, exc_traceback = sys.exc_info()
    traceback_content = "\n".join(traceback.format_exception(exc_type, exc_value, exc_traceback))
    
    # 判断当前登录用户是否属于operator组
    is_operator = request.user.is_authenticated and request.user.groups.filter(name="operator").exists()
    
    context = {}
    if is_operator:
        # 将调试信息传递给模板
        context.update({
            "exception_msg": str(exc_value),
            "traceback": traceback_content
        })
    
    # 渲染模板(支持单模板条件判断或分两个独立模板)
    return render(request, "500.html", context, status=500)

步骤2:更新URL配置,使用自定义处理函数

在项目根目录的urls.py中,覆盖默认的handler500,指向你的自定义视图:

from django.urls import path
from 你的应用名.views import custom_500

# ... 其他URL路由配置 ...

handler500 = "你的应用名.views.custom_500"

步骤3:创建动态500错误模板

在应用的templates目录下创建500.html模板,通过模板条件判断为不同用户展示对应内容:

<!DOCTYPE html>
<html>
<head>
    <title>服务器错误(500)</title>
</head>
<body>
    <h1>服务器错误(500)</h1>
    
    {% if traceback %}
        <div class="debug-info">
            <h2>调试详情</h2>
            <p><strong>异常信息:</strong> {{ exception_msg }}</p>
            <h3>回溯栈:</h3>
            <pre>{{ traceback }}</pre>
        </div>
    {% else %}
        <p>抱歉,服务器暂时出现技术问题,请稍后重试。若问题持续,请联系客服。</p>
    {% endif %}
</body>
</html>

如果你偏好拆分模板,也可以分别创建500_operator.html和500_client.html,然后在自定义视图中根据用户组渲染对应的模板即可。

关键注意事项

  • 安全性: 该逻辑严格限制只有已登录且属于operator组的用户才能查看敏感的回溯信息,避免泄露给未授权用户。
  • Debug模式兼容性: 即使DEBUG = False,该视图仍会为operator组用户捕获并展示回溯信息,完全满足你的需求。
  • 测试方法: 你可以创建一个故意抛出异常的测试视图(比如raise ValueError("测试500错误")),然后分别以operator和client用户身份登录,验证不同的页面输出效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:56:40