2017-07-31 9 views
0

このトピックに関する記事はたくさんありますが、私が間違っていることはまだ分かりません。私は今何をすべきかここでDjango - Linuxでサーバー上のファイルを作成して特定の場所に保存する

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
STATIC_URL = '/static/' 

    if DEBUG: 
     MEDIA_URL = '/media/' 
     STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR),"static","static-only") 
    #STATIC_ROOT = [os.path.join(BASE_DIR,"static-only")] 
     MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR),"static","media") 
    #MEDIA_ROOT = [os.path.join(BASE_DIR,"media")] 
     STATICFILES_DIRS = (
      #os.path.join(os.path.dirname(BASE_DIR),"static","static"), 
      os.path.join(BASE_DIR,"static"), 
     ) 

です:

root/my_app_name/main/static/media/images/contact_photos

私のsettings.pyファイルは次のようになります。

私の目標は、作成/以下のディレクトリ内のファイルを更新することです

full_filename = os.path.join(settings.BASE_DIR + '\main\static\media\images\contact_photos', filename) 
with open(full_filename, 'wb+') as f: 
     f.write(img_data) 

私は次のエラーで終了します。

[Errno 2] No such file or directory: '/root/static/media/images/file_name.jpg' 

これを修正する方法を知っている人はいますか?私は、joiningのBASE_DIRまたはMEDIA_ROOTへのファイルパスがあるはずですが、これを行うことはできません。

python manage.py shell 

をし、対話モードでこれを試してください:

+0

なぜ 'はos.pathを.join(settings.BASE_DIR、 '\ main \ static \ media \ images \ contact_photos'、filename)ではなく、os.path.join(settings.BASE_DIR、 '\ main \ static \ media \ images \ ) '? – cezar

+0

なぜバックスラッシュで、スラッシュを使わないのですか? 'os.path.join'の引数は** relative **のパスでなければなりません。 – cezar

+0

なぜ '/ root'の下に直接あなたのdjangoプロジェクトを置いていますか? 'root/my_app_name/main/static/media/images/contact_photos'のような深いディレクトリ階層が本当に必要ですか? – cezar

答えて

1

まず、以下のコマンドを使用してPythonインタプリタを開き、私はそれが/root/my_app_nameを返すことを期待したい

from my_app_name import settings 
print(settings.BASE_DIR) 

。次に、あなたのコードの中で、あなたのファイルへのフルパスを構築することができ

full_filename = os.path.join(settings.BASE_DIR, 
    'main/static/media/images/contact_photos', filename) 

変数filenameが値file_name.jpgを持っている私たちが得るべきであると仮定すると:

/root/my_app_name/main/static/media/images/contact_photos/file_name.jpg 
関連する問題