一尘不染

如何更改Django应用的名称?

django

我通过重命名应用程序的文件夹,导入及其所有引用(模板/索引)来更改了Django中应用程序的名称。但是现在当我尝试运行时出现此错误python manage.py runserver

Error: Could not import settings 'nameofmynewapp.settings' (Is it on sys.path?): No module named settings

如何调试和解决此错误?有什么线索吗?


阅读 2384

收藏
2020-03-26

共1个答案

一尘不染

请按照以下步骤在Django中更改应用的名称:

  1. 重命名项目根目录中的文件夹
  2. 更改为你的应用程序的任何引用他们的依赖关系,即应用程序的views.py,urls.py“manage.py”,和settings.py文件。
  3. django_content_type使用以下命令编辑数据库表:UPDATE django_content_type SET app_label='<NewAppName>' WHERE app_label='<OldAppName>'
  4. 同样,如果你有模型,则必须重命名模型表。供postgres使用ALTER TABLE <oldAppName>_modelName RENAME TO <newAppName>_modelName。对于mysql我也认为它是相同的(如@null_radix所述)
  5. (对于Django> = 1.7),更新django_migrations表以避免重新运行以前的迁移:UPDATE django_migrations SET app='<NewAppName>' WHERE app='<OldAppName>'。注意:对于Django 1.8+是否需要执行此步骤,存在一些争论(在注释中)。如果有人确定,请在此处更新。
  6. 如果你models.py的的元类已app_name列出,请确保也将其重命名(由@will提及)。
  7. 如果你已在应用程序中为statictemplates文件夹命名空间,则还需要重命名它们。例如,重命名old_app/static/old_appnew_app/static/new_app
  8. 要重命名django models,你需要更改django_content_type.nameDB中的条目。对于PostgreSQL使用UPDATE django_content_type SET name='<newModelName>' where name='<oldModelName>' AND app_label='<OldAppName>'
    元点(如果使用virtualenv):值得注意的是,如果要重命名包含virtualenv的目录,则env中可能会有几个文件包含绝对路径,并且也需要更新。如果你遇到诸如此类的错误,ImportError: No module named …可能是罪魁祸首。(感谢@danyamachine提供此功能)。
2020-03-26