Django FileResponse [Errno 2] No such file or directory

Рейтинг: 0Ответов: 1Опубликовано: 02.06.2023

Пытаюсь сделать сайт который при нажатии кнопки будет генерировать видео для п-ля и автоматически скачивать его, пока решил по кнопке автоматом загружать картинку, для того чтоб проверь работу сайта, столкнулся с проблемой при отправке файла с помощью 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'

Ответы

▲ 0

Настройки должны быть примерно ват такие

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'))