Открыть файл в приложении 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 из скрипта, также расположенного по адресу foo/myapp/anotherapp просто сказать

file = open('./baz.txt')

теперь, в зависимости от того, где я запустить сервер, я должен сказать

file = open('./myapp/anotherapp/baz.txt')

или

file = open('./anotherapp/baz.txt')

2 ответов


решение было описано в Любимые Советы И Приемы Django вопрос. Решение заключается в следующем:

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

что делает именно то, что вы упомянули.

Ps. Пожалуйста, не переписывайте file переменной, это один из встроенных.


Я думаю, что нашел ответ через другой вопрос переполнения стека (да, я искал, прежде чем спрашивать...)

теперь я делаю это

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