Django: вернуть данные изображения из вида - PullRequest
12 голосов
/ 13 декабря 2011

Я хочу, чтобы представление возвращало данные изображения.что-то вроде

return HttpResponse(image_data, mimetype=”image/png”)

Я знаю, что могу сделать file.read(), чтобы получить данные изображения, но поскольку изображение маленькое (например, 1x1 px), я хочу просто сохранить его как строкуобъект (или любой другой объект, который я могу скопировать и вставить в мой код).Таким образом, я сохраняю себе поиск диска каждый раз, когда открывается представление.

Как мне это сделать?Я уверен, что это легко, я просто не уверен, какие термины использовать для поиска.

ps Я знаю, что с Django обычно не обрабатывают изображения таким образом.

Ответы [ 2 ]

12 голосов
/ 13 декабря 2011

Вот простой пример из проекта django-openid

def logo(request):
    return HttpResponse(
        OPENID_LOGO_BASE_64.decode('base64'), content_type='image/gif'
    )
    # Logo from http://openid.net/login-bg.gif
    # Embedded here for convenience; you should serve this as a static file
    OPENID_LOGO_BASE_64 = """
    R0lGODlhEAAQAMQAAO3t7eHh4srKyvz8/P5pDP9rENLS0v/28P/17tXV1dHEvPDw8M3Nzfn5+d3d
    3f5jA97Syvnv6MfLzcfHx/1mCPx4Kc/S1Pf189C+tP+xgv/k1N3OxfHy9NLV1/39/f///yH5BAAA
    AAAALAAAAAAQABAAAAVq4CeOZGme6KhlSDoexdO6H0IUR+otwUYRkMDCUwIYJhLFTyGZJACAwQcg
    EAQ4kVuEE2AIGAOPQQAQwXCfS8KQGAwMjIYIUSi03B7iJ+AcnmclHg4TAh0QDzIpCw4WGBUZeikD
    Fzk0lpcjIQA7
    """
1 голос
/ 13 декабря 2011

Вы можете рассмотреть возможность использования base64 . Но вы можете обнаружить, что повышение производительности практически не имеет значения, поскольку ваше изображение будет храниться в кеше диска. Мне было бы интересно увидеть тесты декодирования base64 против доступа к диску. Вы даже можете обнаружить, что эта оптимизация будет иметь противоположный эффект.

Редактировать: Я нашел эту страницу в кеше Linux linux , которую вы могли бы прочитать, принимая это решение. Пока активность вашего диска не слишком высока, вероятность того, что этот крошечный образ окажется частью дискового кэша, вероятна.

...