Я делаю сайт django, на который пользователи могут загружать изображения, и я хочу использовать sorl-thumbnail для создания миниатюр и кэширования. Я использую рабочий процесс на основе контейнера, используя podman на хосте Fedora silverblue.
Я настроил механизм кеша memcached (используя изображение докера memcached) и могу без проблем устанавливать и получать значения из кеша и из кеша в django-shell. Я запустил команду миграции с добавлением sorl-thumbnail в мои установленные приложения. Я выполнил команду ./manage.py createcachetable и никаких ошибок. Я использую pylibmc с:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211',
}
}
Я создал модель с полем изображения sorl.thumbnail ImageField, хотя надеюсь в конечном итоге использовать стандартное поле изображения, что, как мне кажется, возможно.
У меня есть следующая модель, представление и шаблон:
модель...
class Image(models.Model):
image_file = ImageField(upload_to=user_directory_path)
#thumbnail = models.ImageField(upload_to=str(user_directory_path) + '_thumb', null=True)
userprofile = models.ForeignKey(ForumProfile, on_delete=models.CASCADE, related_name="images")
view... (функция get добавлена во время отладки этой проблемы)...
class ForumProfileUploadView(LoginRequiredMixin, FormView):
form_class = ImageForm
template_name = 'list.html'
success_url = reverse_lazy('my-view')
def get(self, request, *args, **kwargs):
form = self.form_class()
message = 'Hi!'
images = Image.objects.all()
context = {'images': images, 'form': form, 'message': message}
return render(self.request, 'list.html', context)
def form_valid(self, form):
obj = form.save(commit=False)
obj.userprofile = self.request.user.profile.forumprofile
# img = PillowImage.open(obj.image_file.file)
# obj.thumbnail = MakeThumbnail(self.request.FILES['image_file'])
# breakpoint()
obj.save()
message = 'Success!'
images = Image.objects.all()
breakpoint()
context = {'images': images, 'form': form, 'message': message}
return render(self.request, 'list.html', context)
def form_invalid(self, form):
message = 'The form is not valid. Fix the following error:'
images = Image.objects.all()
context = {'images': images, 'form': form, 'message': message}
return render(self.request, 'list.html', context)
шаблон...
<!DOCTYPE html>
<html lang='en'>
<head>
</head>
<body>
<!-- List of uploaded documents -->
{% block content %}
{% load thumbnail %}
{% if images %}
All images in the database:
{% for image in images %}
{% thumbnail image.image_file.url "100x100" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
{% endfor %}
{% else %}
<p>No images.</p>
{% endif %}
<!-- Upload form. Note enctype attribute! -->
<form action="{% url 'my-view' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ message }}
<p>{{ form.non_field_errors }}</p>
<p>{{ form.image_file.label_tag }} {{ form.image_file.help_text }}</p>
<p>
{{ form.image_file.errors }}
{{ form.image_file }}
</p>
<p><input type="submit" value="Upload"/></p>
</form>
{% endblock content %}
</body>