Django удаление дублированных изображений - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь вернуть случайные, но разные изображения из данного каталога.

Я написал функцию, которая будет возвращать случайное изображение из каталога, но мне нужно, чтобы он возвращал отдельные изображения, в данный момент он возвращает изображения, но некоторые из них дублируются.

Что такое лучший способ сделать это? Буду признателен за любую помощь.


random_image.py

def random_image(image_dir):
    valid_extensions = ['.jpg', '.jpeg', '.png', '.gif']
    rand_dir = '/static/app_pickfeel/images/'
    # print(rand_dir)
    files = [f for f in os.listdir(settings.BASE_DIR + '/app_pickfeel/static/app_pickfeel/images')
             if f[f.rfind("."):len(f)] in valid_extensions]
    print(random.choice(files))

    return rand_dir + random.choice(files)

Я использую функцию в шаблоне . html вызывая это несколько раз

<img class="img-thumbnail" src="{{ MEDIA_URL}}{% random_image 'app_pickfeel/images/' %}">

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Я думаю, вы захотите random.sample(), который возвращает n случайные уникальные опции из списка, вместо вызова этой функции в al oop.

import os

valid_extensions = {'.jpg', '.jpeg', '.png', '.gif'}
rand_path = '/static/app_pickfeel/images'
rand_dir = settings.BASE_DIR + '/app_pickfeel/' + rand_path

def random_images(n):
    files = [
        f 
        for f 
        in os.listdir(rand_dir)
        if os.path.splitext(f)[-1] in valid_extensions
    ]
    return [
        os.path.join(rand_dir, f)
        for f
        in random.sample(files, n)
    ]

Затем, вызывая

images = random_images(5)

даст вам список (до) 5 случайных имен файлов.

0 голосов
/ 23 марта 2020

Вы можете попробовать set () , чтобы удалить дубликаты из списка

def random_image(image_dir):
    valid_extensions = ['.jpg', '.jpeg', '.png', '.gif']
    rand_dir = '/static/app_pickfeel/images/'
    # print(rand_dir)
    files = [f for f in os.listdir(settings.BASE_DIR + '/app_pickfeel/static/app_pickfeel/images')
             if f[f.rfind("."):len(f)] in valid_extensions]
    remove_duplicate = set(files)
    final_list = list(remove_duplicate)
    print(random.choice(final_list))

    return rand_dir + random.choice(final_list)

Надеюсь, это поможет вам ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...