If you've been following along, you are probably already aware the Pinax team has decided to make some radical changes to their directory structure based on input from users. I took the time to update my own Pinax project — let me show you what's changed.
First, here's the new directory structure, straight from the README file:
projects/
complete_project/ a complete sample project and templates
basic_project/ a more basic starter project (still to come)
apps/
external_apps/ external re-usable apps via svn:externals
local_apps/ re-usable apps that aren't yet externalized
core_apps/ non re-usable apps specific to sample project
libs/
external_libs/ external libraries
docs/ documentation (in progress)
fixtures/ test fixtures (in progress)
As you can see, the application directories have been put into their own structure and a directory for libraries was added. Basically, the space is less flat now.
The projects
directory contains sample projects. The manage.py
executable in
these project directories are designed to automatically include the previously
mentioned library and application directories in the appropriate paths.
I've already made the changes to my project to include the new directory structure.
What I've done is removed the top level externals (core_apps
, external_apps
,
external_libs
, local_apps
) and replaced the with two new externals: apps
and libs
.
Once that was done, I edited my manage.py
to accommodate the new directories.
Here's a unified diff to give you an idea.
Index: manage.py
===================================================================
--- manage.py (revision 31)
+++ manage.py (working copy)
@@ -2,11 +2,11 @@
from os.path import abspath, dirname, join
from site import addsitedir
import sys
-path = addsitedir(abspath(join(dirname(__file__), '../external_libs')), set())
+path = addsitedir(abspath(join(dirname(__file__), '../libs/external_libs')), set())
if path: sys.path = list(path) + sys.path
-sys.path.insert(0, abspath(join(dirname(__file__), '../external_apps')))
-sys.path.insert(0, abspath(join(dirname(__file__), '../local_apps')))
-sys.path.insert(0, abspath(join(dirname(__file__), '../core_apps')))
+sys.path.insert(0, abspath(join(dirname(__file__), '../apps/external_apps')))
+sys.path.insert(0, abspath(join(dirname(__file__), '../apps/local_apps')))
+sys.path.insert(0, abspath(join(dirname(__file__), '../apps/core_apps')))
from django.core.management import execute_manager
try:
The paradigm moving forward is probably going to be to create your new projects
in the project
directory. If that ends up being the best way to go, we'll cross
that bridge when we get to it. For now, this setup is working for us.