将 django 应用程序移动到子文件夹和 url.py 错误

2024-03-09

我有一个关于将 django 应用程序放入“apps”子目录的问题。我在项目根目录中有一个名为“faktura”的应用程序。我不喜欢它放在那里,我想将所有应用程序存储在“apps”子目录下。

所以,我发现我可以将python路径扩展到“apps”子目录,所以在查找互联网后,我将此字符串添加到settings.py中: sys.path.insert(0, os.path.join(PROJECT_PATH, "应用”))。然后我将应用程序添加到 INSTALLED_APPS,例如“faktura”。一切都很顺利,直到我将 url(r'^faktura/', include('faktura.urls')) 添加到根目录中的 urls.py 中。从那以后,Django 抛出错误消息“No module named faktura”完整的taceback在这里:http://dpaste.com/737380/ http://dpaste.com/737380/

这里可能出了什么问题,为什么只有 urls.py 找不到该应用程序?如果我将它添加到 PATH 中,它会找不到这个应用程序吗?我花了一个早上试图找出问题所在,现在我需要你的帮助。


我不知道为什么前面的答案得到 -1,除了可能有一些可以纠正的冗余行。不管怎样,我发现了一种稍微不同的方法,不涉及向 python 路径添加任何内容。

这是我的最终目录结构,我稍后会解释:

mysite
├── mysite
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── apps
│   ├── __init__.py
│   └── myfirstapp
│       ├── __init__.py
│       ├── admin.py
│       ├── models.py
│       ├── tests.py
│       └── views.py
└── manage.py

无论您是刚刚创建项目还是想要移动应用程序,都可以创建apps应包含您的应用程序的子目录。诀窍是添加一个__init__.py到该目录。

mkdir apps
touch apps/__init__.py

现在您可以将现有的应用程序移至apps子目录。如果您想创建一个新的,请使用以下命令:

python manage.py mysecondapp
mv mysecondapp apps/

警告:不要试图打电话python manage.py ./apps/mysecondapp。由于某种原因,这会删除该目录中的所有其他应用程序。我就这样损失了一天的工作。

接下来,您需要修复一些导入。你的settings.py应该带有前缀apps:

INSTALLED_APPS = (
    ...
    'apps.myfirstapp',
    'apps.mysecondapp'
)

最后,修复您的项目urls.py前缀apps:

urlpatterns = patterns('', 
  url(r'^myfirstapp', include('apps.myfirstapp.urls')),
  ...
)

根据您编写它们的方式,您可能还需要修复应用程序内的一些导入。要么只使用from models import MyFirstModel或者也可以使用前缀from apps.myfirstapp.models import MyFirstModel.

简而言之,如果你让你的apps目录 python 包(通过添加__init__.py),您可以将其用作导入路径的一部分。无论部署方法如何,这都应该有效,无需额外配置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 django 应用程序移动到子文件夹和 url.py 错误 的相关文章

随机推荐