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

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

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

推荐答案

按照以下步骤在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. 此外,如果有模型,则必须重命名模型表.对于博士后,使用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>'.Note:对于Django 1.8+是否需要此步骤,存在一些争论(在 comments 中);如果有人确实知道,请在这里更新.
  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>'
  9. Update 16Jul2021:另外,应用程序中的__pycache__/文件夹必须被删除,否则你会得到EOFError: marshal data too short when trying to run the server.由@Serhii Kushchenko提到

Meta point (If using virtualenv):值得注意的是,如果您要重命名包含您的viralenv的目录,您的env中可能会有几个文件包含绝对路径,并且也需要更新.如果您收到诸如ImportError: No module named ...之类的错误,这可能是罪魁祸首.(感谢@danyamachine提供了这一点).

Other references:您可能还想参考以下链接以获得更完整的图片:

  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)自动执行上述步骤(未经测试的代码).您已收到警告!)

Python相关问答推荐

在后台运行的Python函数

为什么我的(工作)代码(生成交互式情节)在将其放入函数中时不再工作?

如何从格式为note:{neighbor:weight}的字典中构建networkx图?

如何销毁框架并使其在tkinter中看起来像以前的样子?

在matplotlib动画gif中更改配色方案

Pandas 填充条件是另一列

比较两个数据帧并并排附加结果(获取性能警告)

将jit与numpy linSpace函数一起使用时出错

Pandas 滚动最接近的价值

Python上的Instagram API:缺少client_id参数"

_repr_html_实现自定义__getattr_时未显示

Mistral模型为不同的输入文本生成相同的嵌入

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

删除字符串中第一次出现单词后的所有内容

OR—Tools中CP—SAT求解器的IntVar设置值

计算每个IP的平均值

让函数调用方程

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

提高算法效率的策略?

将一个双框爆炸到另一个双框的范围内