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

2024-04-25 18:53:37 发布

您现在位置:Python中文网/ 问答频道 /正文

通过重命名Django中的文件夹、导入和所有引用(模板/索引),我已经更改了该应用程序的名称。但是现在当我试图运行python manage.py runserver时,我得到了这个错误

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

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


Tags: djangopyimport文件夹名称模板应用程序settings
3条回答

Django 1.7中的新功能是一个应用程序注册表,它存储配置并提供内省。这个机器让你改变几个应用程序属性。

我想强调的一点是,重命名应用并不总是必要的:通过应用配置,可以解决冲突的应用。但如果你的应用程序需要友好的命名,也是一条路要走。

举个例子,我想把我的投票应用命名为“来自用户的反馈”。事情是这样的:

polls目录中创建apps.py文件:

from django.apps import AppConfig

class PollsConfig(AppConfig):
    name = 'polls'
    verbose_name = "Feedback from users"

将默认应用程序配置添加到您的polls/__init__.py

default_app_config = 'polls.apps.PollsConfig'

有关更多应用程序配置:https://docs.djangoproject.com/en/1.7/ref/applications/

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

  1. 重命名项目根目录中的文件夹
  2. 更改应用程序依赖项中对应用程序的任何引用,即应用程序的views.pyurls.py、^{settings.py文件。
  3. 使用以下命令编辑数据库表django_content_typeUPDATE django_content_type SET app_label='<NewAppName>' WHERE app_label='<OldAppName>'
  4. 另外,如果有模型,则必须重命名模型表。对于postgres使用ALTER TABLE <oldAppName>_modelName RENAME TO <newAppName>_modelName。对于mysql,我也认为它是相同的(正如@null基数所提到的)
  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_app重命名为new_app/static/new_app
  8. 要重命名django models,需要更改DB中的django_content_type.name项。对于postgreSQL使用UPDATE django_content_type SET name='<newModelName>' where name='<oldModelName>' AND app_label='<OldAppName>'

Meta point(如果使用virtualenv):值得注意的是,如果要重命名包含virtualenv的目录,则env中可能有多个文件包含绝对路径,还需要更新。如果您遇到诸如ImportError: No module named ...之类的错误,这可能是罪魁祸首。(感谢@danyamachine提供了这个)。

其他参考资料:您可能还需要参考以下链接以获得更完整的图片

  1. Renaming an app with Django and South
  2. How do I migrate a model out of one django app and into a new one?
  3. How to change the name of a Django app?
  4. Backwards migration with Django South
  5. Easiest way to rename a model using Django/South?
  6. Python code(感谢A.Raouf)自动化上述步骤(未测试的代码)。你被警告了
  7. Python code(感谢rafaponieman)自动执行上述步骤(未测试的代码)。你被警告了

如果您正在使用PyCharm,并且项目在重命名后停止工作:

  1. 编辑运行/调试配置并更改环境变量DJANGO_SETTINGS_MODULE,因为它包含您的项目名称。
  2. 转到Settings/Languages&;Frameworks/Django并更新设置文件位置。

相关问题 更多 >