読者です 読者をやめる 読者になる 読者になる

settings.py

Django

「ぱい」の伝道師id:jYoshioriさんがDjangoのsettings.pyについて書かれていたので、僕がどうやっているかを書いてみたいと思います。

セッティングのちょっとしたこと
http://d.hatena.ne.jp/jYoshiori/20071001/1191259204

TEMPLATE_DIRSには何も書かない

昔は、

+ myproject
    + myapp
        + views.py
        + models.py
    + templates

のようなディレクトリ構成にしていたので、TEMPLATE_DIRSには、id:jYoshioriさんのように、

import os
BASE_PATH = os.path.dirname( __file__ )
TEMPLATE_DIRS = (
    os.path.join(BASE_PATH, 'templates'),
)

と書いていたのですが、今はアプリケーション・ディレクトリの直下にtemplatesを置くようにしているので、TEMPLATE_DIRSは何も書いていません。ディレクトリ構成だと、次のような感じ。

+ myproject
    + common
        + views.py
        + models.py
        + templates
            + base.html
    + yet_another_app
        + views.py
        + models.py
        + templates

アプリケーション・ディレクトリ直下のtemplatesディレクトリにテンプレートを置いておくと、自動的にテンプレートを探して読み込んでくれます。(正確には、TEMPLATE_LOADERSで、django.template.loaders.app_directories.load_template_sourceを有効にしている場合ですが。)

この配置のメリットは、アプリケーションを配布しやすいことで、逆にデメリットは、共通のレイアウトテンプレートをどこに置くかを迷う、ということです。
なので、僕はcommonという共有アプリケーションを用意して、common/templates/base.htmlをすべてのテンプレートの継承元として使っています。(commonは、「空のアプリ」、あるいは「抽象クラス」のつもりで用意したのに、今となっては、実装コードを含めて、なんでもかんでもそこに入っているのは秘密です。)

開発用のDJANGO_SETTINGS_MODULEを用意する

プロダクション環境と開発環境で設定が異なるのはよくあることなので、settings.py(プロダクション環境用)とdevelopment.py(開発環境用)を二つ用意しています。
settings.pyに共通の設定、プロダクション環境用の設定を書き、development.py内でsettings.pyの内容を上書きするようにしています。この方法だと、"if DEBUG:"で設定を汚すことがありません。

# development.py
# settings.pyからすべてインポートし、以下で、必要な項目だけを上書きします
from settings import *

DEBUG = False
TEMPLATE_DEBUG = DEBUG

DATABASE_NAME = 'db_dev'     # 開発用データベース名
DATABASE_USER = 'user_dev'   # 開発用データベースのユーザ名
DATABASE_PASSWORD = 'password'

この場合、開発環境でテストサーバを起動したり、シェルを起動するには、--settingsオプションで読み込む設定モジュールを指定する必要があります。

$ python manage.py runserver --settings=development

【追記】
開発版のDjangoではrunserver, shellなどのコマンドの後に、--settingsオプションを指定しないと動かなくなった?ようなので、少し修正しました。

Ni!

モンティ・パイソン・アンド・ホーリー・グレイル [DVD]

モンティ・パイソン・アンド・ホーリー・グレイル [DVD]