经典的Django项目源码目录结构css
Django在一个项目的目录结构划分方面缺少必要的规范。在Django的官方文档中并无给出大型项目的代码建议目录结构,网上的文章也是根据项目的不一样结构也有适当的变化。html
样式一 :强调模块化设计 参见参考文章二python
··管理项目的依赖文件requirements文件夹,列出项目中须要的依赖的文件,好比项目使用的全部python包。django
··分离应用文件和库文件(apps ,libs)新建apps和libs用来保存application和libraryapp
··建立完善的setting模块框架
优点:模块化设计适合规模较大的项目模块化
缺点:这种布局结构没有说明static文件的放置路径。布局
$ tree . . ├── djangolicious │ ├── apps │ │ ├── blog │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ ├── tests.py │ │ │ └── views.py │ │ ├── __init__.py │ │ ├── news │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ ├── tests.py │ │ │ └── views.py │ │ └── reader │ │ ├── __init__.py │ │ ├── models.py │ │ ├── tests.py │ │ └── views.py │ ├── __init__.py │ ├── libs │ │ ├── display │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ ├── tests.py │ │ │ └── views.py │ │ ├── __init__.py │ │ └── management │ │ ├── __init__.py │ │ ├── models.py │ │ ├── tests.py │ │ └── views.py │ ├── settings │ │ ├── common.py │ │ ├── dev.py │ │ ├── __init__.py │ │ ├── prod.py │ │ └── test.py │ ├── urls.py │ └── wsgi.py ├── manage.py ├── requirements │ ├── common.txt │ ├── dev.txt │ ├── prod.txt │ └── test.txt └── requirements.txt 10 directories, 36 files
此模板是开源项目经常使用的结构,适合大型Django项目开发。测试
Project的目录结构,PROJ_NAME指的是项目名ui
PROJ_NAME/ __init__.py 这几个文件是django建立project所必须的,不作过多说明 manage.py settings.py urls.py apps/ 即便是“小”工程,也建议分红多个app,每一个app足够简单,只解决某一个方面的问题 (注1) myapp1/ myapp2/ extra_apps/ 引用的其余app。 libs/ 加载第三方模块,能够避免版本冲突,按照标准的site-packages管理(注2) python*.*/ 指定python版本号 site-packages/ requirements.pip #pip的依赖说明文件 tests/ project级别的测试,对于每一个app,还要有本身的测试代码 static/ 静态内容 css/ js/ images/ uploads/ 上传文件所在目录 templates/ 模板目录,覆盖app的模板 flatpages/ comments/ example/ app1/ app2/ templatetags/ tag目录
注1:指定app加载,在settings.py中设置:
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps'))
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'extras'))
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'libs'))
注2:自定义libs的加载,在settings.py中设置:
sys.path.insert(0, '/{{MY_LIB)}/site-packages/*****.egg')
sys.path.insert(0, '/{{MY_LIB}} /site-packages/')
$APP_NAME/ tests/ app级别的测试代码 models/ 注1 __init__.py Amodels.py Bmodels.py templates/ 注2 templatetags/ tag目录
注1:若是很好的控制app的规模,Model类数量少,可使用惯用的models.py文件中, 不然将models作成一个package
接下来能够有两种作法:
1. 在__init__.py中import全部的Model类
2. 指定Model的元类(Meta)的app_label, 参考这里
注2:若是extend 工程下的base.html, 使用 !base.html
个人总结
···样式一中强调的“Think Modular”思想十分适合大型的项目,大部分大型的项目也是遵循模块化目录结构的原则的。
以下图所示:
-project ---app1 --templates --statics views models tests urls ---app2 ---appn statics --css --js settings
···我在开源项目上看到的小型Project的目录结构差别较大,没有清晰的体系结构,规律不是很明显。
参考文章
1 Large Django application layout
2 重要Django project structure 基于Django 1.4 project
3 Project design / FS layout for large django projects [closed]
5 重要 Django最佳实践:项目布局 | python开源项目目录结构
6 AN UPDATED GENERAL DJANGO PROJECT (>= 1.5) STRUCTURE OR FOLDER LAYOUT