我有一个Django项目,让我们说“project1”。 应用程序的典型文件夹结构是:
/project1/
/app1/
/app2/
...
__init__.py
manage.py
settings.py
urls.py
如果我想将所有应用程序保存在某个单独的文件夹中,例如“应用程序”,我该怎么办?所以该结构应如下所示:
/project/
apps/
app1/
app2/
...
__init__.py
manage.py
settings.py
urls.py
答案 0 :(得分:42)
您可以在apps
中插入以下内容,将settings.py
文件夹添加到您的python路径中:
import os
import sys
PROJECT_ROOT = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps'))
然后您可以像使用项目根目录一样使用此文件夹中的所有应用程序!
答案 1 :(得分:12)
您可以非常轻松地执行此操作,但您需要将settings.py
更改为如下所示:
INSTALLED_APPS = (
'apps.app1',
'apps.app2',
# ...
)
您的urls.py
看起来像这样:
urlpatterns = patterns('',
(r'^app1/',include('apps.app1')),
(r'^app2/',include('apps.app2')),
)
..并修改任何import
以指向应用位置
答案 2 :(得分:3)
如何使用BASE_DIR
中已存在的settings.py
变量。
只需添加以下内容:
import sys
sys.path.insert(0, os.path.join('BASE_DIR', 'apps'))
希望这有帮助。
答案 3 :(得分:1)
如果你正在使用virtualenv / virtualenvwrapper(你应该这样做),你可以使用包含的add2virtualenv
命令来扩充你的python路径:
mkdir apps
cd apps
pwd
[/path/to/apps/dir]
将该路径复制到剪贴板,然后:
add2virtualenv /path/to/apps/dir
答案 4 :(得分:0)
只需在您的apps文件夹中添加__init__.py
(总共4个下划线)。现在你可以做到
urlpatterns = [
path('polls/',include('apps.polls.urls')),
path('admin/', admin.site.urls)
]
答案 5 :(得分:0)
作为Berhard Vallant
或Anshuman
答案的略有变化,这是放置在settings.py
中的替代代码段
import os
import sys # Insert this line
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Insert the two lines below
APPS_DIR = os.path.join(BASE_DIR, '<your_project_dir_name>/apps/')
sys.path.insert(0, APPS_DIR)
以这种方式执行此操作具有以下好处,即模板目录更加简洁,如下所示。如果没有APPS_DIR
变量,则<your_project_dir_name>/apps/
列表的DIRS
列表中的TEMPLATES
将会重新定位。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(APPS_DIR, '<app_name>/templates/<app_name>'),
os.path.join(APPS_DIR, '<app_name>/templates/<app_name>'),
...
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
您可以使用INSTALLED_APPS
中给出的简短名称或使用apps.py
的长格式语法替换{{1 }}和您应用的名称。
答案 6 :(得分:0)
就我而言,我的项目文件夹结构如下:
/project/
/apps/
/app1/
/app2/
/src/
/settings.py
...
所以我在settings.py
上用这两行代码解决了这个问题:
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.insert(0, os.path.join(BASE_DIR, '../apps'))
无需更改urls.py
。
答案 7 :(得分:0)
通过使用 manage.py
# Fisrt create apps folder and appname subfolder
mkdir -p ./apps/<appname>
# Then create new app
python manage.py <appname> ./apps/<appname>