Как отобразить файл изображения с удаленного сервера sftp в шаблоне django?

  1. У нас есть 2 сервера. Один из них для медиа файлов, а другой для сервера проекта django (ngnx+gunicorne).
  2. Наш медиа-сервер является локальным (внутренним). Мы хотим получить доступ к медиа серверу изнутри проекта с помощью пакета хранения sftp, который включает в себя paramiko. Мы не хотим получать доступ к медиа серверу через URL (http,https).
  3. .
  4. HttpResponse(file, content_type=type) может отображать файл изображения как большую картинку, но мы хотим передать файл изображения в шаблон django для отображения в html файле, как <a href="{{ course.get_absolute_url }}"><img src="{{images}}" alt=""></a>
  5. .
  6. Мы знаем, что HttpResponse не является хорошим решением, но мы используем его нижеприведенный код для объяснения нашей проблемы.
# view
def coursesPageView(request):
    courses = Course.objects.filter(is_published=True)
    image_data =[imageRespone(data) for data in courses]

    data = {
            'published_courses_list':courses,
            'images' : image_data
        }
    return render(request, 'pages/course2.html', data)
    

def imageRespone(valid_image):
    if sfs.exists(valid_image.image.name):
        file = sfs._read(valid_image.image.name)
        type, encoding = mimetypes.guess_type(valid_image.image.name)        
        response = HttpResponse(file, content_type=type)
        return response
    else:
        return HttpResponse('404 Not Found')
#course2.html
 <a href="{{ course.get_absolute_url }}"><img src="{{images}}" alt=""></a>

Вы можете подключить общий диск к вашему веб-серверу, указывающий на ваш медиа-сервер (Samba для linux). Затем с помощью Django вы можете указать локализацию вашего статического файла.

Например :

import os

MEDIA_URL        = "/media/"
MEDIA_ROOT       = os.path.abspath(os.path.join(os.sep, 'srv', 'media'))

STATIC_URL       = '/app/static/'
STATIC_ROOT      = os.path.abspath(os.path.join(os.sep, 'srv', 'static'))

Обратите внимание на разрешения между веб-сервером и смонтированной папкой.

Вернуться на верх