1. ホーム
  2. パイソン

[解決済み】Pythonのos.pathを使用して、1つのディレクトリに移動するにはどうすればよいですか?

2022-04-02 03:54:23

質問

最近、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 では、project フォルダが app フォルダと同じ階層に移動したためです は、私の settings.py ファイルは現在 /Users/hobbes3/Sites/mysite/mysite/ ではなく /Users/hobbes3/Sites/mysite/ .

そこで、実は今、私の疑問は2つあります。

  1. を使用するにはどうすればよいですか? os.path から1つ上の階層のディレクトリを見るために __file__ . 言い換えれば、私は /Users/hobbes3/Sites/mysite/mysite/settings.py を見つけるために /Users/hobbes3/Sites/mysite/templates を相対パスで使用します。
  2. を維持する必要があります。 template フォルダ(アプリ間のテンプレートがあり、例えば admin , registration など)をプロジェクトで /User/hobbes3/Sites/mysite レベルまたは /User/hobbes3/Sites/mysite/mysite ?

解決方法は?

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))

テンプレートフォルダをどこに置くかについては、Django 1.4 が出たばかりで、 まだ見ていないのでわかりません。その問題を解決するために、SE で別の質問をした方がいいでしょう。

また normpath よりも、パスをクリーンアップするために abspath . しかし、この状況では、Django は相対パスではなく、絶対パスを期待します。

クロスプラットフォームの互換性を保つには os.pardir の代わりに '..' .