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モードで変更するようにすると良い。
参考
- perezvon 開発用の設定ファイルを用意して、settings.pyを上書き。
- BASE_DIR = os.path.dirname(os.path.abspath(__file__))
- sqlite3でos.getcwd()で失敗 apacheの権限など
- MiCHiLUさんの
- 本番環境以外でDebug=Trueにする
MEDIA
- 親分の
- mod_pythonで1サーバーでMEDIAも、ContextProcessorsの設定で{{ MEDIA_URL }}をつかるように
