Django アプリケーションの配置と設定

Django っつーのは機能毎にアプリケーションで区切っていくのがいいんだみたいな話を聞いたような気がするので、一応自分なりになるべく汎用性がありそうな部分はアプリケーションとして切り分けて作るように心がけてる。

んで、そうやってやってくとプロジェクト下にアプリケーションのディレクトリがいっぱいできてものすごいごっちゃごちゃになってくる。そうなると気持ち悪いからってんで、プロジェクト下に apps ってディレクトリ作ってそん中にアプリケーションを全部入れるんだって Python 旅館で教えて頂いたんだけど、まんま今までと同じようにやろうとしたら settings.py はこんな感じになって

# project_name/settings.py
#....

ROOT_URL_CONF = 'project_name.urls'

INSTALED_APPS = (
    'apps.news',
    'apps.bbs.core',
    'apps.bbs.avatar',
    'apps.member',
# ...
)

アプリケーション内ではだいたいこんな感じで import せにゃならんようになる(はず)。

# project_name/apps/news/views.py
from apps.news.models import Entry, Category

# ...

で、自分的にはこのアプリケーション内のモジュール import 時に『apps』とかつくのがなんか嫌で、どうにかして『from news.models import Entry』みたいな感じで apps なしでスマートに import できんもんかと思って探ってみてたら、pinax の manage.py にそれっぽいやつが書いてあった。

どうやら sys.path.insert 使ってパス追加するらしい。なるほど。。
素直に manage.py 変更すりゃいいのかもしれんけど、自分的になんとなく manage.py 変更するのが嫌だったので settings.py に書くことにした。

# project_name/settings.py
# ...

ROOT_URL_CONF = 'urls'

INSTALED_APPS = (
    'news',
    'bbs.core',
    'bbs.avatar',
    'member',
# ...
)

# Add Apps directory's path
import sys
sys.path.insert(0, os.path.join(BASE_DIR, 'apps')  # BASE_DIR = os.path.abspath(os.path.dirname(__file__))

こんな感じ。
これで 『news.models import Entry』みたいな感じで書けるようになったんで、一応自分の欲望はかなっただけど。。ほんとにこのやり方であっとるんだろか。。
あと、hg clone したときにいちいちプロジェクト名変えるのがめんどいのでついでに ROOT_URL_CONF もプロジェクト名取っ払ってみた。とりあえずこれで clone し放題!まーこれも正しいのかどうかはわからんだけども。。

あーそれと、アプリの中のアプリみたいな「アプリ同士にちょっと依存関係のあるアプリ」を作るときって「core」みたいなの作るべきなんかなぁ。これも前に議論があった気がするけど、ほんとのとこどれがベストなんだろう。。



まーわからんことだらけです。精進せにゃ精進。
そんでもってとりあえず私事ですが、就職決まって良かった。。ほんと、頑張ろう、俺。