如何将所有Django应用程序保存在特定文件夹中 我有一个Django项目,可以说“ Project1”。 应用程序的典型文件夹结构是: /project1/ /app1/ /app2/ ... __init__.py manage.py

问题描述 投票:0回答:10
如果我想将所有应用程序保存在某些单独的文件夹中,例如“应用程序”,该怎么办?因此该结构应该看起来如下:

/project/ apps/ app1/ app2/ ... __init__.py manage.py settings.py urls.py
    

您可以通过将以下内容插入您的
apps
python django django-apps
10个回答
67
投票
settings.py

然后,您可以以与您的项目root相同的方式使用此文件夹中的所有应用程序!
    
您可以很容易地做到这一点,但是您需要更改the

import os import sys PROJECT_ROOT = os.path.dirname(__file__) sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps'))
看起来像这样:

settings.py


25
投票

INSTALLED_APPS = ( 'apps.app1', 'apps.app2', # ... )

..并修改任何

urls.py
    

如何利用
urlpatterns = patterns('', (r'^app1/',include('apps.app1')), (r'^app2/',include('apps.app2')), )

import

BASE_DIR

添加以下内容:

22
投票
settings.py

希望这帮助
    

import sys sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

Berhard Vallant
的答案的轻微变体,这是一个替代片段,可以放在
Anshuman


7
投票

以这种方式进行它具有额外的好处,即您的模板目录更加干净,因为它们看起来像下面。没有

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

中给出的简短名称或使用the的长格式语法在
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
列表中的应用程序中的应用程序。
    
您需要简单简单,您需要添加到settings.py

apps.py

并编辑您的应用程序配置

 -old应用程序配置:
appname.apps.AppnameConfig
对新应用程序配置:
appname
the安装的应用程序示例:


3
投票

我认为这非常有用且有用。好运:)


即将在您的应用程序夹中添加

class MyappConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'myapp'

(总共4个下划线)。现在你可以做

    class MyappConfig(AppConfig):
        default_auto_field = 'django.db.models.BigAutoField'
        label='myapp'
        name = 'apps.myapp'

如果您使用virtualenv/virtualenvwrapper(有点过时但仍然有效),则可以使用随附的
INSTALLED_APPS = [ ... 'apps.myapp.apps.MyappConfig' ... ]

命令来增强您的python路径:

__init__.py

副本,然后:


1
投票

在我的情况下,我的项目文件夹结构如下:

add2virtualenv

1
投票
mkdir apps cd apps pwd [/path/to/apps/dir]

上解决了:

add2virtualenv /path/to/apps/dir

无需更改
/project/ /apps/ /app1/ /app2/ /src/ /settings.py ...

以下对我有用。

0
投票

settings.py

inside apps.py under /myapp:

BASE_DIR = os.path.dirname(os.path.dirname(__file__)) sys.path.insert(0, os.path.join(BASE_DIR, '../apps'))

在设置中

urls.py
    

添加像这样

/project1 /apps /myapp

0
投票
不要忘记在

nettings.py

中导入

class MyAppConfig(AppConfig): name = "apps.myapp"
然后通过添加和更改

name

label

来更新您的应用程序项目中的

apps.py

0
投票
After

PROJECT_ROOT = os.path.dirname(__file__) sys.path.insert(0, os.path.join(PROJECT_ROOT, "apps"))
不要忘记添加更改

SETTINGS.py 我更喜欢使用多个列表,而不是installed_apps

import os
import sys

from django.apps import AppConfig class ProjectConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "projects"

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.