Django Settings.py

出典: UeblogWiki

目次

Tips

本環境の設定ファイルと開発環境の設定ファイルの共存

BASE_DIR

settings.pyの設定にはTEMPLATEやsqlite3のdbの位置など絶対パスで設定するものが数多くありますが、settings.pyの絶対PATHを取得するBASE_DIRを設定しておけば、settings.pyを変更せずに違う環境で運用することができます。


import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

#sqlite3のdbのPATH
DATABASE_NAME = os.path.join(BASE_DIR, 'data/dbfile')

#テンプレートのPATHの指定
TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)
settings.pyの分割

settings.pyは#BASE_DIRを設定することで異なる環境でも同じsettings.pyを使うことができますが、テスト環境がsqlite3で本番がMySQLのように変更する必要がある場合は、異なる部分だけを設定したcustom_settings.pyなどのファイルを用意して

from custom_settings.py import *

と、読み込むようにするといいでしょう。

settings.pyの上書き

settings.pyの分割はGoogleのソースコード管理ツールでGuidoが使っていたテクニックですが、perezvonさんの使っている本環境のsettings.pyをdevelopment.pyなどのように名前を変えた開発環境用の設定ファイルで異なる部分だけ上書きするテクニックはより有効だと思います。

development.pyで

from settings.py import *

として、データベースなどの異なる部分を上書きしてしまえばよいのです。

開発環境として動かす場合は

% python manage.py --settings=development runserver

と --settingsオプションを渡せばOKです。

TEMPLATE_CONTEXT_PROCESSORS

たとえばブログアプリを作るとして、ブログタイトルなどプロジェクトのどのテンプレートからも読み込みさせたいコンテキストがある場合はDjango_RequestContextを使います。その場合のsettings.pyの設定は以下のようにします。

settings.py

from django.conf import global_settings

TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
    "myproject.context_processors.context",
)

myproject/context_processors.py

def context(request):
    return {
        "title" : "My BLOG TITLE",
        "AUTHOR": "uemura"
    }

reStructuredText用の設定

filter 「markup」で reStructuredTextを使う場合

 ========
 タイトル
 ========

のような最初のタイトル行が表示されません。

RESTRUCTUREDTEXT_FILTER_SETTINGS = {
    'doctitle_xform': False,
}

の設定をいれておけば表示されます。

タグがh1ばかりになるのをh3にしたい。また、セクションが1つだと強制的にh1になるのを避ける

RESTRUCTUREDTEXT_FILTER_SETTINGS = {
    'initial_header_level': 3,
    'doctitle_xform': 0

}

cacheの設定

if DEBUG:
    CACHE_BACKEND = "dummy:///"
else:
    CACHE_BACKEND = "memcached://127.0.0.1:11211/"

のようにDEBUGモードで変更するようにすると良い。

参考

MEDIA