Как отобразить файл изображения с удаленного сервера sftp в шаблоне django?
- У нас есть 2 сервера. Один из них для медиа файлов, а другой для сервера проекта django (ngnx+gunicorne).
- Наш медиа-сервер является локальным (внутренним). Мы хотим получить доступ к медиа серверу изнутри проекта с помощью пакета хранения sftp, который включает в себя paramiko. Мы не хотим получать доступ к медиа серверу через URL (http,https).
HttpResponse(file, content_type=type)
может отображать файл изображения как большую картинку, но мы хотим передать файл изображения в шаблон django для отображения в html файле, как<a href="{{ course.get_absolute_url }}"><img src="{{images}}" alt=""></a>
.
- Мы знаем, что 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'))
Обратите внимание на разрешения между веб-сервером и смонтированной папкой.