Django FileResponse [Errno 2] No such file or directory
Пытаюсь сделать сайт который при нажатии кнопки будет генерировать видео для п-ля и автоматически скачивать его, пока решил по кнопке автоматом загружать картинку, для того чтоб проверь работу сайта, столкнулся с проблемой при отправке файла с помощью FileResponse : выдает ошибку, что нету директории или файла, хотя они там есть.
FileNotFoundError: [Errno 2] No such file or directory: 'B:\\python21\\test_task\\video_generator\\media/img.png'
Вопрос как пофиксить такую проблему?
views.py
from .forms import UserTextForm
from django.http import FileResponse
from django.conf import settings
import os
base_dir = settings.MEDIA_ROOT
def user_video_form(request):
form = UserTextForm()
context = {
'form': form
}
return render(request, 'user_video/index.html', context)
def generation_page(request):
response = FileResponse(open(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'media/img.png'), 'rb'))
return render(request, 'user_video/generation.html'), response
setting.py
STATIC_URL = 'static/'
STATIC_ROOT = BASE_DIR / 'static'
MEDIA_URL = 'media/'
MEDIA_ROOT = BASE_DIR / 'media'
Ответы (1 шт):
Автор решения: gef3dx
→ Ссылка
Настройки должны быть примерно ват такие
setting.py
import os
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
# Media files
MEDIA_URL = '/'
MEDIA_ROOT = BASE_DIR
А у Урлах как то так
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
и у тебя еще ошибка в путях
B:\\python21\\test_task\\video_generator\\media/img.png
Наверно нужно
B:\\python21\\test_task\\video_generator\\media\\img.png
response = FileResponse(open(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'media\\img.png'), 'rb'))