@ckatala

Как исправить not enough arguments for format string?

Обновил easy-thumbnails до последней версии и перестало работать!

from django.http import HttpResponsePermanentRedirect, HttpResponseNotFound, HttpResponseBadRequest
from django.core.files.storage import default_storage
from easy_thumbnails.files import get_thumbnailer
from easy_thumbnails.exceptions import InvalidImageFormatError
import re

SIZE_RE = re.compile(r'^(\d+)x(\d+)$')

def resize(request, path):
  thumbnail_opts = {}
  if 'size' in request.GET:
    if SIZE_RE.match(request.GET['size']):
      thumbnail_opts['size'] = map(int, request.GET['size'].split('x'))
      if 'crop' in request.GET:
        thumbnail_opts['crop'] = request.GET['crop']
    else:
      return HttpResponseBadRequest('Неверный формат. ')
  else:
    return HttpResponsePermanentRedirect(default_storage.url(path))
  try:
    thumbnailer = get_thumbnailer(default_storage, path)
    thumbnail = thumbnailer.get_thumbnail(thumbnail_opts)
    return HttpResponsePermanentRedirect(thumbnail.url)
  except IOError:
    return HttpResponseNotFound('Файл не найден')
  except InvalidImageFormatError:
    return HttpResponseBadRequest('Файл не является изображением.')


Ошибка

Traceback (most recent call last):
File "/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/apps/users/api/views.py", line 41, in resize
    thumbnail = thumbnailer.get_thumbnail(thumbnail_opts)
  File "/venv/lib/python3.7/site-packages/easy_thumbnails/files.py", line 512, in get_thumbnail
    thumbnail = self.get_existing_thumbnail(thumbnail_options)
  File "/venv/lib/python3.7/site-packages/easy_thumbnails/files.py", line 473, in get_existing_thumbnail
    high_resolution=high_resolution)
  File "/venv/lib/python3.7/site-packages/easy_thumbnails/files.py", line 436, in get_thumbnail_name
    prepared_opts = thumbnail_options.prepared_options()
  File "/venv/lib/python3.7/site-packages/easy_thumbnails/options.py", line 20, in prepared_options
prepared_opts = ['%sx%s' % tuple(self['size'])]
TypeError: not enough arguments for format string
  • Вопрос задан
  • 414 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Вероятно, проблема в том, что в регулярном выражении числа разделяются запятой, а разбить вы их пытаетесь по 'x'. Соответственно, в thumbnail_opts['size'] получаете один элемент вместо ожидаемых двух.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
докинуть аргументов

ну или код поправить
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы