最近、Django を v1.3.1 から v1.4 にアップグレードしました。
私の昔のsettings.py
私は
TEMPLATE_DIRS = (
os.path.join(os.path.dirname( __file__ ), 'templates').replace('\\', '/'),
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
これは を指します/Users/hobbes3/Sites/mysite/templates
が、Django v1.4ではプロジェクトフォルダがアプリフォルダと同じレベルに移動されたため、私のsettings.py
ファイルは/Users/hobbes3/Sites/mysite/mysite/
ではなく になりました/Users/hobbes3/Sites/mysite/
。
つまり、私の質問は実際には2つあります。
os.path
から 1 レベル上のディレクトリを検索するには、どのように使用すればよいですか__file__
。つまり、相対パスを使用して/Users/hobbes3/Sites/mysite/mysite/settings.py
検索したいのです。/Users/hobbes3/Sites/mysite/templates
- フォルダー (、など
template
のアプリ間テンプレートを含む) はプロジェクトレベルに保持する必要がありますか、それとも に保持する必要がありますか?admin
registration
/User/hobbes3/Sites/mysite
/User/hobbes3/Sites/mysite/mysite
ベストアンサー1
os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))
テンプレート フォルダーをどこに配置すればよいかは、Django 1.4 がリリースされたばかりでまだ確認していないためわかりません。この問題を解決するには、SE で別の質問をしたほうがよいでしょう。
normpath
パスをクリーンアップするには、 ではなくを使用することもできますabspath
。ただし、この状況では、Django は相対パスではなく絶対パスを想定しています。
クロスプラットフォームの互換性を確保するには、os.pardir
の代わりにを使用します'..'
。