如何更改Django应用程序的名称?
我已经改变了在Django的应用程序的名称,通过重命名其文件夹,导入和所有的引用(模板/索引)。 但是现在,当我尝试运行python manage.py runserver
时,出现这个错误
Error: Could not import settings 'nameofmynewapp.settings' (Is it on sys.path?): No module named settings
我怎样才能debugging和解决这个错误? 任何线索?
按照以下步骤在Django中更改应用程序的名称:
- 重命名您的项目根目录中的文件夹
- 在其依赖关系中更改对应用程序的引用,即应用程序的
views.py
,urls.py
,manage.py和settings.py
文件。 - 使用以下命令编辑数据库表
django_content_type
:UPDATE django_content_type SET app_label='<NewAppName>' WHERE app_label='<OldAppName>'
- 同样,如果你有模型,你将不得不重新命名模型表。 对于postgres,使用
ALTER TABLE <oldAppName>_modelName RENAME TO <newAppName>_modelName
。 对于MySQL我也认为它是相同的(正如@null_radix所提到的) - (对于Django> = 1.7)更新
django_migrations
表以避免重新运行以前的迁移:UPDATE django_migrations SET app='<NewAppName>' WHERE app='<OldAppName>'
。 注意 :如果Django 1.8+需要这个步骤,则有一些争议(在注释中)。 如果有人知道肯定请在这里更新。 - 如果您的
models.py
的元类具有app_name
列表,请确保也重命名(由@will提及)。 - 如果您已将空间或
templates
文件夹命名为您的应用程序,则还需要重命名这些文件夹。 例如,将old_app/static/old_app
重命名为new_app/static/new_app
。 - 为了重命名django
models
,您需要更改DB中的django_content_type.name
条目。 对于postgreSQL,使用UPDATE django_content_type SET name='<newModelName>' where name='<oldModelName>' AND app_label='<OldAppName>'
元数据点(如果使用virtualenv):值得注意的是,如果你正在重命名包含你的virtualenv的目录,你的env中可能会有几个文件包含一个绝对path,并且还需要更新。 如果你得到错误,如ImportError: No module named ...
这可能是罪魁祸首。 (感谢@danyamachine提供这个)。
其他参考资料:您可能还想参考下面的链接以获取更完整的图片
- 用Django和South重命名一个应用程序
- 如何将模型从一个django应用程序迁移到新的应用程序中?
- 如何更改Django应用程序的名称?
- 使用Django South向后迁移
- 使用Django / South重命名模型最简单的方法?
- Python代码 (感谢A.Raouf )自动执行上述步骤(未经testing的代码,您已被警告!
Django 1.7中的新function是一个存储configuration并提供反省的应用程序registry。 这个机器让你改变几个应用程序的属性。
我要说的重点是,重命名应用程序并不总是必要的:通过应用程序configuration,可以解决冲突的应用程序。 但是,如果你的应用需要友好的命名,也是如此。
作为一个例子,我想命名我的民意调查应用程序“来自用户的反馈”。 它是这样的:
在polls
目录中创build一个apps.py
文件:
from django.apps import AppConfig class PollsConfig(AppConfig): name = 'polls' verbose_name = "Feedback from users"
添加默认的应用程序configuration到您的polls/__init__.py
:
default_app_config = 'polls.apps.PollsConfig'
有关更多应用程序configuration: https : //docs.djangoproject.com/en/1.7/ref/applications/
如果您正在使用PyCharm并且项目在重命名后停止工作:
- 编辑运行/debuggingconfiguration并更改环境variablesDJANGO_SETTINGS_MODULE,因为它包含您的项目名称。
- 转到设置/语言和框架/ Django并更新设置文件的位置。