django: невозможно заставить работать sorl-thumbnail

Я делаю сайт 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>

person miller the gorilla    schedule 05.02.2021    source источник


Ответы (1)


Мне удалось заставить его работать. Я вполне уверен, что мне нужно было настроить кеш для работы всего сайта, хотя я мог бы использовать его для определенного представления, и это позволило sorl.thumbnail начать работать. https://docs.djangoproject.com/en/3.1/topics/cache/#the-per-site-cache

person miller the gorilla    schedule 05.02.2021