Я создаю веб-приложение django для просмотра и обработки медицинских изображений, хранящихся в формате .gz. Веб-приложение имеет одну модель (Post) и форму, которая собирает метаданные от пользователей, а также один файл .gz с вызовом models.FileField. В моем файле views.py я могу обработать ответ и передать путь к медицинскому изображению в средство просмотра javascript, а также все метаданные об изображении (например, тип пациента, часть тела и т. Д.), Которые просто отображаются. текстовые поля. Средство просмотра javascript ожидает сжатое изображение (взаимодействие с файлами .gz является стандартным в данной области). Кажется, Django обслуживает только эти распакованные медиа-файлы, а просмотрщик javascript (чей-то проект) не любит распакованные данные.
До сих пор я играл с опциями ['Content-Encoding'], но яне могу ничего заставить работать. Может быть, мне нужны отдельные функции просмотра для метаданных и данных изображения?
В views.py:
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
rendered = render(request, 'maps/post_detail.html', {'post': post})
# rendered['Content-Encoding'] = 'gzip'
return rendered
@login_required
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST, request.FILES) #, instance=profile)
if form.is_valid():
post = form.save(commit=False)
post.contributor = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'maps/post_edit.html', {'form': form})
Упрощенный файл models.py:
from django.conf import settings
from django.db import models
from django.utils import timezone
class Post(models.Model):
contributor = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
bodypart = models.CharField(max_length=200, default='NA')
age = models.CharField(max_length=200, default='NA')
doctornotes = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
upload = models.FileField(upload_to='', default='defaultimage.nii.gz')
def __str__(self):
return self.title
Я передаюдата рендеринга в шаблон:
{% extends 'maps/base.html' %}
{% block content %}
<h2>Loading viewer for image data...</h2>
<p>Upload details: {{ post.upload }}</p>
{% load static %}
<link rel="stylesheet" href="{% static 'maps/imageviewer.css' %}" type="text/css">
<script type="text/javascript" src="{% static 'maps/imageviewer.js' %}"></script>
<script type="text/javascript">
var params = [];
params["images"] = ["{{ post.upload.url }}"];
</script>
<div class="imageviewer" data-params="params"></div>
<hr>
<div class="post">
<h2>Details about this image:</h2>
<p>Title: {{ post.title }}</p>
<p>Body Part: {{ post.bodypart }}</p>
<p>Age: {{ post.age }}</p>
<p>Doctor's Notes: {{ post.doctornotes|linebreaksbr }}</p>
<p>Contributed by: {{ post.contributor }} on {{ post.created_date}}</p>
</div>
{% endblock %}
Есть ли способ отключить автоматическую распаковку и отправить моей программе просмотра изображений файл .gz'd?