-1 On django manipulating PYTHONPATH +1 On encouraging people to keep their applications out of their project!
On Thu, Mar 17, 2011 at 1:08 AM, Tai Lee <real.hu...@mrmachine.net> wrote: > If we're talking about the lowest common denominator and keeping > things simple, this is what I think we'd have: > > myapp1/ > myapp2/ > myproject/ > -django.wsgi.sample > -manage.py > -management/ > --commands/ > ---myproject_mycommand.py.sample > -media/ > --myproject/ > ---readme.txt > -models.py > -settings.py > -static/ > --myproject/ > -templates/ > --myproject/ > -templatetags/ > --myproject_tags.py.sample > -urls.py > -vendor/ > --readme.txt > -views.py > otherapp1/ > otherapp2/ > > Basically it's what we have now plus three things, samples of common > optional files (which could include a link to the relevant docs page > so people can get started right away), suggestions for naming > conventions (use the app name as a prefix to avoid clashes with other > apps) and a vendor folder for 3rd party reusable apps: > > - a sample wsgi wrapper > - a sample management command showing that management commands should > be prefixed with the app name to avoid clashes with other apps > - a readme.txt reminding people that the media folder is for uploaded > content (not static content) and suggesting that they use an > `upload_to` value of `app_name/model_name/field_name` on their model > file and image fields as a starting point > - a static folder showing that static content should be placed in a > folder named after the app to avoid clashes with other apps > - a templates folder showing that templates should be placed in a > folder named after the app to avoid clashes with other apps > - a sample template tag library showing that template tag libraries > should be prefixed with the app name to prevent clashes with other > apps and suffixed with "_tags" to prevent quirky import issues (e.g. > myproject_tags.py, myproject_form_tags.py) > - a vendor folder that is automatically added to the python path (at > the beginning, or after the project folder) and a readme.txt > explaining that 3rd party reusable apps or specific versions of apps > that exist elsewhere on the system should be placed here and imported > with `from otherapp... import...` > > Another thing to point out is that a "project" is just an "app" with a > settings.py file, a media folder, and perhaps a vendor folder. > > My big thing is that we should drive home the importance of decoupling > or loosely coupling your apps. Unless you are 100% certain that you > will ALWAYS want to bundle an app with your project AND and that you > will NEVER want to use an app without your project, your other apps > should exist as separate modules that can be placed anywhere on your > python path. > > If Django were to automatically add the vendor folder to the python > path as the second folder (after the folder containing your > settings.py file), it would provide a standard way for users to > include specific versions of 3rd party apps or their own reusable apps > that may or may not be installed elsewhere on the hosting environment. > For example, bundling a specific version of Django to be used even if > another version of Django is already installed. > > I've recently decoupled a bunch of apps that were initially too > tightly coupled to a common library that I use in most projects. As > the apps grew and as we started working on more projects, it became > troublesome to have to bundle this increasingly large library of apps > when only a handful would be used by a project, and there were also > times when I'd have liked to make use of just one in a project that a > 3rd party had source code access to without giving them access to > everything. > > I wish that I'd learned sooner to always try and build smaller, > simpler apps with more limited and specific scope that were decoupled > or more loosely coupled to other apps so that they could be more > easily reused. Anything that Django can do to make this point more > obvious would be a good thing. > > Cheers. > Tai. > > > On Mar 17, 2:21 pm, Simon Litchfield <si...@s29.com.au> wrote: > > On Mar 15, 9:46 am, Russell Keith-Magee <russ...@keith-magee.com> > > wrote: > > > > > On Fri, Mar 11, 2011 at 1:14 PM, Simon Litchfield <si...@s29.com.au> > wrote: > > > > Who votes we should come up with a django-blessed 'official' default > project layout / directory structure? > > > > > Sure -- no disagreement that it would be good to have some common > > > ground with regards to project layout. All we need now is to agree > > > what that blessed project layout should be. :-) > > > > Lowest common denominator is what we're after here I think. Eg -- > > > > manage.py > > --conf > > ----settings.py > > ----settings_dev.py > > --lib > > ----other_app1 > > ----other_app2 > > --my_app1 > > --my_app2 > > --media > > --templates > > --templatetags (project tags, non-app specific, if you have any) > > --views.py (project views, non-app specific, if you have any) > > --urls.py (project urls, non-app specific) > > > > Or maybe this -- > > > > manage.py > > --conf > > ----settings.py > > ----settings_dev.py > > ----(wsgi files) > > --lib > > ----other_app1 > > ----other_app2 > > --project > > ----my_app1 > > ----my_app2 > > ----templatetags (project tags, non-app specific, if you have any) > > ----views.py (project views, non-app specific, if you have any) > > ----urls.py (project urls, non-app specific) > > --media > > ----css > > ----img > > ----js > > ----uploads > > --templates > > > > This way we keep our pythons separate from our chickens. > > > > Also to suggest a preferred media structure or not- at least a > > centralised uploads / var media folder would be good practice I think, > > at least from provisioning and permissions etc point of view. > > > > Thoughts? These are just a few suggestions to get the conversation > > started! > > -- > You received this message because you are subscribed to the Google Groups > "Django developers" group. > To post to this group, send email to django-developers@googlegroups.com. > To unsubscribe from this group, send email to > django-developers+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-developers?hl=en. > > -- Read my blog! I depend on your acceptance of my opinion! I am interesting! http://techblog.ironfroggy.com/ Follow me if you're into that sort of thing: http://www.twitter.com/ironfroggy -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.