Открыть файл в приложении Django
Я хочу открыть файл из приложения Django, используя open()
. Проблема в том, что 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
, из script, также расположенный в foo/myapp/anotherapp
, просто говоря
file = open('./baz.txt')
Теперь, в зависимости от того, где я запускаю сервер, я должен сказать, что
file = open('./myapp/anotherapp/baz.txt')
или
file = open('./anotherapp/baz.txt')
Ответы
Ответ 1
Решение было описано в вопросе Избранные вопросы Django Tips & Tricks. Решение выглядит следующим образом:
import os
module_dir = os.path.dirname(__file__) # get current directory
file_path = os.path.join(module_dir, 'baz.txt')
Что именно вы упомянули.
Ps. Не перезаписывайте переменную file
, один из встроенных функций.
Ответ 2
Я думаю, что нашел ответ через другой вопрос (да, я искал, прежде чем спрашивать...)
Теперь я делаю это
pwd = os.path.dirname(__file__)
file = open(pwd + '/baz.txt')