settings.py を便利に使う 初心者向けTIPS 3選
Djangoは、設定ファイルが .py : Python コード で記述されています(昔触った MoinMoinWikiもそうだった気がする)。
Python初めての時は、インデント間違いに気づかず動作しないなど苦労した苦い思い出がありますが、いやいや便利ですよね。設定ファイル中にコードが書けるというのは。
Django の設定ファイル settings.py の記述などで便利と思った点をメモしておきます。
確認環境は Django1.6.x です。
ディレクトリを便利に記述
BASE_DIR を確認
1.6 の場合、settings.pyにBASE_DIRが、os.path.dirname() を利用して用意されています。
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os BASE_DIR = os.path.dirname(os.path.dirname(__file__))
これを使わない手はないですよね。
次のような定数設定に使うと、配置するディレクトリが変わるたびに書き換えの必要がなくなり楽になります。
STATIC_ROOT を定義
本番deploy時に使う "python manage.py collectstatics" した時の static files のコピー先の指定。
プロジェクトディレクトリの下に /static/ とする場合:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
同じような形で、ファイルアップロード先のMEDIA_ROOTも対応できますね。
TEMPLATE_DIRS を定義
app自身のテンプレートは、app配下のtemplatesディレクトリを自動で見に行ってくれます。
しかし、admin app のテンプレートの1つだけを上書きしたい場合などに、検索先を追加できる
TEMPLATE_DIRS = os.path.join(BASE_DIR, 'appname/templates')
別の方法としては、PYTHON_PATH で定義されたフォルダも自動検索対象になるようです。
ADMINS でエラー通知を受け取る
ちょっと特殊かな?と思った仕様ですが、本番Deploy時などで DEBUG="False" になっているとエラーの内容がメール通知される仕組みになっています。
DEBUG を False にすると、コード内で例外が送出され、その例外 が捕捉されず、結果的に 500 エラーになった場合に、 Django は ADMINS 設定にリストされている全てのユーザにメールを送信します。
こんな感じで記述しておけばOK。複数の宛先も対応しています。
ADMINS = (('Name','account@domain.local'))
個人的には、500エラーの内容はメールだけじゃなくログにも落としたいので、別途対応を探しているところです。
settings.py は、引数で切替可能
こんな感じでOKです。設定を試行錯誤する時などに便利。cronなどで動作させる時に、ログの出力先を変更したいジョブなどで使っています。
python manage.py runserver --settings=mysite.settings
その他
あ、こんな便利な事が!と知るきっかけになったエントリー2つ。少し前のエントリーのため、静的ファイルをMEDIA_ROOTに配置していたバージョンについてになっていますが、考え方は今でも大丈夫。DEBUGフラグを自動で切替えるとか、追加でローカル環境でだけ設定を読込むとか非常に参考になります。
- Django 開発初心者に送る 10 の Tips (超訳?) - SPEAKER BREAKA
- パーフェクトな Django の設定ファイル -- Kosei Kitahara's Blog
- python - Favorite Django Tips & Features? - Stack Overflow
あと 1.6 の settings.py にあったリンク先です。この辺りの説明は、きちんとそろってるのが良いところですね(じゃあ、読んでおけってことで > 自分)
For more information on this file, see
For the full list of settings and their values, see