iko*_*tia 35 python django django-apps
我有一个Django项目,让我们说"project1".应用程序的典型文件夹结构是:
/project1/
/app1/
/app2/
...
__init__.py
manage.py
settings.py
urls.py
Run Code Online (Sandbox Code Playgroud)
如果我想将所有应用程序保存在某个单独的文件夹中,例如'apps',我该怎么办?所以该结构应如下所示:
/project/
apps/
app1/
app2/
...
__init__.py
manage.py
settings.py
urls.py
Run Code Online (Sandbox Code Playgroud)
Ber*_*ant 46
您可以apps通过在以下内容中插入以下内容将文件夹添加到python路径settings.py:
import os
import sys
PROJECT_ROOT = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps'))
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用此文件夹中的所有应用程序,就像它们在项目根目录中一样!
Gab*_*aru 15
你可以很容易地做到这一点,但你需要改变它settings.py看起来像这样:
INSTALLED_APPS = (
'apps.app1',
'apps.app2',
# ...
)
Run Code Online (Sandbox Code Playgroud)
你urls.py看起来像这样:
urlpatterns = patterns('',
(r'^app1/',include('apps.app1')),
(r'^app2/',include('apps.app2')),
)
Run Code Online (Sandbox Code Playgroud)
..并修改任何imports以指向应用程序位置
ans*_*man 14
你如何利用BASE_DIR已经存在于settings.py.
只需添加以下内容:
import sys
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
小智 7
Berhard Vallant作为's 或's 答案的轻微变体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)
Run Code Online (Sandbox Code Playgroud)
以这种方式执行此操作还有一个额外的好处,即您的模板目录更加干净,如下所示。如果没有变量,列表的列表中将APPS_DIR会有很多重复。<your_project_dir_name>/apps/DIRSTEMPLATES
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',
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
您可以使用INSTALLED_APPS中给出的短格式名称正常列出列表中的应用程序apps.py,或者使用appname.apps.AppnameConfig替换appname为应用程序名称的长格式语法。
| 归档时间: |
|
| 查看次数: |
15514 次 |
| 最近记录: |