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

Django/Heroku自定义500模板不显示问题求助

问题分析与解决方案

核心原因:Heroku错误页面变量的适用场景差异

你遇到的问题源于对Heroku两类错误页面变量的适用场景理解偏差:

  • MAINTENANCE_PAGE_URL是Heroku平台在应用处于维护模式时直接返回的页面,属于平台层面的控制逻辑,因此能正常生效。
  • ERROR_PAGE_URL仅用于处理Heroku平台级错误,比如dyno崩溃、应用无法启动、请求超时等完全无法连接到应用服务器的情况。而你当前看到的Daphne相关500错误,是应用内部(Django代码抛出异常)的错误,此时Daphne仍在运行并处理请求,Heroku不会拦截这类错误,因此ERROR_PAGE_URL不会生效。

解决方法:通过Django实现自定义500错误页面

应用内部的500错误需要由Django自行处理,提供两种实现方式:

  1. 本地模板方式(最直接)
    在Django项目的templates根目录下创建500.html文件,Django会自动在发生内部500错误时渲染这个模板。确保你的TEMPLATES配置中包含该目录路径。

  2. 调用S3模板方式
    如果要复用S3上的模板,需要自定义Django的500错误视图:

    • 在应用的views.py中添加自定义视图:
      from django.shortcuts import render
      from django.conf import settings
      import requests
      
      def custom_500(request):
          # 从环境变量获取S3模板链接
          s3_template_url = settings.ERROR_PAGE_URL
          try:
              # 请求S3模板内容
              resp = requests.get(s3_template_url)
              resp.raise_for_status()
              # 返回模板内容
              return render(request, None, content=resp.text, status=500)
          except Exception:
              # 失败时回退到本地默认500模板
              return render(request, '500.html', status=500)
      
    • 在项目的urls.py中配置自定义错误处理器:
      handler500 = 'your_app_name.views.custom_500'
      

验证Heroku平台级错误场景

若要验证ERROR_PAGE_URL是否正常工作,可以手动停止应用的web dyno:

heroku ps:stop web

此时访问应用,Heroku会返回你配置的S3自定义错误页面,这才是ERROR_PAGE_URL的正确适用场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:22:46