小编典典

如何更改 Django 应用程序的名称?

all

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

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

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


阅读 61

收藏
2022-06-24

共1个答案

小编典典

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

  1. 重命名项目根目录中的文件夹
  2. 在依赖项中更改对您的应用程序的任何引用,即应用程序的views.pyurls.pymanage.pysettings.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的 Meta Class 已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>'
  9. 更新 16Jul2021 :此外,__pycache__/必须删除应用程序内的文件夹,否则您会得到EOFError: marshal data too short when trying to run the server. 由@Serhii Kushchenko 提及

元点(如果使用 virtualenv): 值得注意的是,如果您要重命名包含您的 virtualenv 的目录,那么您的 env
中可能会有几个包含绝对路径的文件,并且也需要更新。如果您遇到此类错误,ImportError: No module named ...则可能是罪魁祸首。(感谢@danyamachine 提供这个)。

2022-06-24