Я пытаюсь открыть файл, который находится в том же каталоге, что и приложение, из представлений.
-app
--views.py
--about.txt
--...
Мой код для открытия файла..
def home(request):
with open('about.txt','r') as f:
about = f
about = about.split('\n')
about = '<br/>'.join(about)
return render(request, 'app/home.html', {'about':about})
Но я продолжаю получать сообщение об ошибке `
FileNotFoundError at /
[Errno 2] No such file or directory: 'about.txt'
Подумав об этом, я подумал о том, чтобы поместить его в статический каталог, но он все равно выдавал бы ту же ошибку.
Редактировать:
Я не знаю, в этом ли причина... но при нажатии ввода для новой строки она переходит на новый отступ.
@Клаус Д. Что ты имеешь в виду?
относительный путь: about.txt
, абсолютный путь: /home/me/projects/my_first_app/about.txt
.
@Клаус Д. Будет ли использование ~
представлять home
? или home/me/
(я использую Windows)
Нет, ~
— это функция оболочки, а не настоящее имя файла. Но есть os.path.expanduser()
, который может помочь в этом случае.
Вы должны добавить к пути что-то вроде app
, чтобы создать app/about.txt
. У меня недостаточно информации, чтобы сказать вам, что именно, но вот как это узнать:
Когда вы запускаете свое приложение, рабочий каталог, вероятно, находится не в app. Вы можете выяснить, по какому пути он работает, используя os.getcwd()
. Например:
import os
# ...
def home(request):
print(os.getcwd())
with open('about.txt','r') as f:
about = f
about = about.split('\n')
about = '<br/>'.join(about)
return render(request, 'app/home.html', {'about':about})
Как @KlausD. упомянуто, ваш путь относителен. Всякий раз, когда код запускается, он запускается в «рабочем каталоге». Например, если я запустил python views.py
в каталоге app
, текущим рабочим каталогом (сокращенно cwd
) будет app
. Затем, когда дается относительный путь, например about.txt
(что на самом деле означает ./about.txt
, где .
представляет cwd), он ищет в cwd about.txt
.
Хм.... Вы говорите, что app/about.txt
сработает, потому что действует как ./app/about.txt
? (Кроме того, это объяснение очень помогло!)
@ 12944qwerty Я забыл, что django использует в качестве cwd во время выполнения, но что-то в этом роде. Возможно, вам придется сделать что-то вроде ../app/about.txt
, если он работает в другом подкаталоге вашего проекта. (Прошел год с тех пор, как я использовал django, извините!)
Хм.. Я пробовал это... os.getcwd()
возвращает C:\Users\me\Documents\python\project
Итак, я пытался open('\\app\\about.txt')
, но... та же ошибка
@12944qwerty ах ха! /
в начале означает ваш корневой каталог. Добавьте .
перед этим, и все должно работать (open('./app/about.txt')
)
нет... может быть, мне нужно использовать `\`, так как я использую Windows?
Хм. Не должно быть необходимо. Просто попробуй без этого все вместе, типа, попробуй open('app/about.txt')
Если это не сработает, попробуйте указать каталог через os.listdir('app')
и пришлите мне результат.
Давайте продолжить обсуждение в чате.
Если относительный путь не работает, попробуйте абсолютный.