我在Django中更改了一个应用程序的名称,重命名了它的文件夹、导入和所有引用(模板/索引)。但是现在,当我尝试运行python manage.py runserver
错误:无法导入设置“NameOfMyneApp.settings”(是否在系统路径上?):没有名为settings的模块
如何调试和解决此错误?有什么线索吗
按照以下步骤在Django中更改应用程序的名称:
- 重命名项目根目录中的文件夹
- 更改应用程序依赖项中对应用程序的任何引用,即应用程序的
视图.py、URL.py、管理.py和设置.py文件 - 使用以下命令编辑数据库表
django\u content\u type:UPDATE django\u content\u type SET app\u label='<;NewAppName>;'其中app_label='<;OldAppName>;' - 此外,如果有模型,则必须重命名模型表。对于postgres,使用
altertable<;oldAppName>_modelName重命名为<;newAppName>_型号名称。对于mysql,我认为也是一样的(正如@null_radix所提到的) - (对于Django>;=1.7)更新
Django_迁移表以避免重新运行以前的迁移:Update Django_迁移集app=”<;NewAppName>;'其中app='<;OldAppName>;'注意:如果Django 1.8+需要此步骤,则存在一些争论(在评论中);如果有人确实知道,请在此更新 - 如果您的
models.py的元类已列出app\u name,请确保也重命名该类(由@will提及) - 如果您已经在应用程序中为
静态或模板文件夹命名了名称空间,您还需要重命名这些文件夹。例如,将old_app/static/old_app重命名为new_app/static/new_app - 要重命名django
models,您需要更改数据库中的django\u content\u type.name条目。对于postgreSQL,使用updatedjango\u content\u type SET name=”<;newModelName>;'其中name='<;oldModelName>;'和应用程序标签='<;OldAppName>;' - 更新2021年7月16日:此外,必须删除应用程序中的
\uuuuu pycache\uuuu/文件夹,否则您在尝试运行服务器时会得到eoferor:marshal数据太短。由@Serhii Kushchenko提及
元点(如果使用virtualenv):值得注意的是,如果您正在重命名包含virtualenv的目录,则环境中可能有多个文件包含绝对路径,也需要更新。如果您遇到诸如ImportError:No module named…之类的错误,这可能是罪魁祸首。(感谢@danyamachine提供此功能)
其他参考资料:您可能还需要参考以下链接以获得更完整的图片:
- 使用Django和South重命名应用程序
- 如何将模型从一个django应用程序迁移到一个新应用程序中
- 如何更改Django应用程序的名称
- 与Django South的向后迁移
- 使用Django/South重命名模型的最简单方法
- Python代码(感谢A.Raouf)自动执行上述步骤(未经测试的代码。您已收到警告!)
- Python代码(感谢rafaponieman)自动执行上述步骤(未经测试的代码。您已收到警告!)