Открыть файл в приложении Django - PullRequest
17 голосов
/ 15 марта 2012

Я хочу открыть файл из приложения 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 ]

36 голосов
/ 15 марта 2012

Решение было описано в вопросе Favorite 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 переменную, это одна из встроенных .

1 голос
/ 15 марта 2012

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

Я сейчас делаю это

pwd = os.path.dirname(__file__)
file = open(pwd + '/baz.txt')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...