web-dev-qa-db-ja.com

Django appでファイルを開く

open()を使用してDjangoアプリからファイルを開きたい。問題は、open()runserverを実行するディレクトリを使用しているように見えることです。ルートとしてのコマンド。

例えば。このようにfooというディレクトリからサーバーを実行すると

_$pwd
/Users/foo
$python myapp/manage.py runserver
_

open()はルートディレクトリとしてfooを使用します。

代わりにこれを行う場合

_$cd myapp
$pwd
/Users/foo/myapp
$python manage.py runserver
_

myappがルートになります。

私のフォルダ構造が次のようになっているとしましょう

_foo/myapp/anotherapp
_

_foo/myapp/anotherapp_にあるスクリプトから_foo/myapp/anotherapp_にあるファイルを、次のように言うだけで開くことができるようにしたいと思います。

_file = open('./baz.txt')
_

さて、私がサーバーをどこから実行しているかに応じて、私はどちらかを言わなければなりません

_file = open('./myapp/anotherapp/baz.txt')
_

または

_file = open('./anotherapp/baz.txt')
_
17
Paul Hunter

解決策は Favorite Django Tips&Tricks 質問)で説明されています。解決策は次のとおりです。

import os
module_dir = os.path.dirname(__file__)  # get current directory
file_path = os.path.join(module_dir, 'baz.txt')

これはまさにあなたが言ったことをします。

追伸file変数を上書きしないでください。 組み込みの1つ です。

39
Tadeck

私は別のスタックオーバーフローの質問を通して答えを見つけたと思います(はい、私は尋ねる前に検索しました...)

私は今これをします

pwd = os.path.dirname(__file__)
file = open(pwd + '/baz.txt')
1
Paul Hunter