Как передать три или несколько аргументов в шаблон фильтра тегов django? - PullRequest
0 голосов
/ 30 ноября 2018

Как отправить туда аргументы в @register.filter(name='thumbnail') шаблонном теге.Я использую функцию изменения размера изображения, содержащую 2 объекта args и размер изображения. Теперь я хочу передать третий аргумент имя_папки, но не могу найти решение, которое выдает ошибку Не удалось разобрать остаток: ниже приведены функциикоторый является файлом шаблона тега и шаблоном.

Функция тега шаблона

@register.filter(name='thumbnail')
def thumbnail(file, size='200x200',folder_name='users_images'): 
    x, y = [int(x) for x in size.split('x')]
    # defining the filename and the miniature filename
    filehead, filetail = os.path.split(file.path)
    basename, format = os.path.splitext(filetail)
    miniature = basename + '_' + size + format

    #filename = file.path
    #print(filehead+'/users_images/'+filetail)
    if os.path.exists(filehead+'/'+folder_name+'/'+filetail):        
        filename = filehead+'/'+folder_name+'/'+filetail
        filehead = filehead+'/'+folder_name+'/'
    else:
        filename = file.path

    #print(filename)
    miniature_filename = os.path.join(filehead, miniature)
    filehead, filetail = os.path.split(file.url)
    miniature_url = filehead + '/' + miniature
    if os.path.exists(
        miniature_filename
            ) and os.path.getmtime(filename) > os.path.getmtime(
                miniature_filename
                ):
        os.unlink(miniature_filename)

    # if the image wasn't already resized, resize it
    if not os.path.exists(miniature_filename):
        image = Image.open(filename)
        new_image = image.resize([x, y], Image.ANTIALIAS)
        # image.thumbnail([x, y], Image.ANTIALIAS)
    try:
        # image.save(miniature_filename, image.format, quality=90, optimize=1)
        new_image.save(miniature_filename, image.format,
                       quality=95, optimize=1)
    except:
        return miniature_url

    return miniature_url

Файл шаблона Я пробовал 2 разных типа

{{ contact_list.picture|thumbnail:'200x200' 'contacts'}}
{{ contact_list.picture|thumbnail:'200x200','contacts'}}

Если у кого-то есть решение, пожалуйста, помогите мне.Спасибо

1 Ответ

0 голосов
/ 30 ноября 2018

В django шаблонный фильтр не принимает несколько аргументов .Таким образом, вы можете попробовать вот так:

@register.filter(name='thumbnail')
def thumbnail(file, args):
    _params = args.split(',')
    if len(_params) == 1:
      size = _params[0]
      folder_name = "default_folder"
    elif len(_params) == 2:
       size = _params[0]
       folder_name = _params[1]
    else:
       raise Error

    x, y = [int(x) for x in size.split('x')]

    ...

использование:

{{ contact_list.picture|thumbnail:'200x200,contacts'}}

Пожалуйста, проверьте этот SO ответ для более подробной информации.

...