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

部署到Heroku时修改Django应用名称引发的问题咨询

解决Django应用重命名(workout→workoutcalendar)后的ModuleNotFoundError问题

看起来你只做了最基础的重命名操作,漏掉了很多隐藏的引用,这才导致应用找不到workout模块。下面是所有你需要检查并修改的地方:

  • 项目根URL配置文件(urls.py)
    这里大概率有引用原应用的URL路由,比如:

    from django.urls import include
    urlpatterns = [
        path("", include("workout.urls")),  # 替换成 "workoutcalendar.urls"
    ]
    

    如果给应用设置了命名空间,也要同步修改命名空间的名称。

  • settings.py中的关键配置

    1. 首先是INSTALLED_APPS,你肯定在这里注册过原应用:
      INSTALLED_APPS = [
          # ... 其他应用
          "workoutcalendar",  # 替换原来的 "workout"
      ]
      
    2. 另外检查settings里的其他配置,比如LOGIN_REDIRECT_URL、LOGOUT_REDIRECT_URL或者你自定义的任何引用workout的变量,都要改成新名称。
  • 应用内部的所有导入语句
    遍历workoutcalendar文件夹下的views.py、models.py、admin.py、forms.py等所有Python文件,把所有绝对导入里的workout替换成workoutcalendar,比如:

    # 旧代码
    from workout.models import WorkoutPlan
    from workout.views import dashboard
    
    # 新代码
    from workoutcalendar.models import WorkoutPlan
    from workoutcalendar.views import dashboard
    
  • admin.py中的模型注册
    这里肯定有导入原应用模型的代码,同步修改:

    from django.contrib import admin
    from workoutcalendar.models import WorkoutPlan  # 替换原来的 workout.models
    admin.site.register(WorkoutPlan)
    
  • 模板文件中的URL反向解析
    模板里如果用了{% url 'workout:dashboard' %}这种命名空间式的反向URL,要把命名空间改成workoutcalendar:

    {% url 'workoutcalendar:dashboard' %}
    
  • WSGI/ASGI启动文件
    检查项目根目录的wsgi.py和asgi.py,如果有硬编码的原模块名,比如:

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "workout.settings")
    

    替换成"workoutcalendar.settings"(虽然你改了环境变量,但硬编码的地方也得同步改)。

  • Heroku的Procfile配置
    如果你的Procfile里有启动命令,比如:

    web: gunicorn workout.wsgi --log-file -
    

    要把workout.wsgi改成workoutcalendar.wsgi。

  • 数据库迁移文件(可选但推荐)
    迁移文件里会记录原应用的名称,虽然不修改也能正常运行,但为了项目整洁,可以用全局替换把迁移文件里的'workout'换成'workoutcalendar',或者干脆删除migrations文件夹下除了__init__.py的所有文件,重新运行python manage.py makemigrations和python manage.py migrate生成新的迁移记录(操作前记得备份数据库)。

最后一个小技巧:用全局搜索工具(比如终端里的grep -r "workout" .,或者IDE的全局搜索)扫描整个项目,找出所有遗漏的workout引用,确保没有漏网之鱼。本地测试没问题后再推送到Heroku就可以解决这个报错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:22:51