2011-12-13 7 views
10

Chcę, aby widok zwrócił dane obrazu. więc coś wzdłuż liniidjango: zwróć dane obrazu z widoku

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

wiem, że mogę zrobić file.read() aby uzyskać dane obrazu, ale ponieważ obraz jest mały (jak 1x1 px) Chcę po prostu zapisać go jako obiekt string (lub cokolwiek obiekt mogę skopiować i wkleić w moim kodzie). W ten sposób zapisuję się przy wyszukiwaniu dysku za każdym razem, gdy widok zostanie trafiony.

Jak mogę to zrobić? Jestem pewien, że to jest łatwe, po prostu nie jestem pewien, jakich terminów użyć do wyszukiwania.

p.s. Wiem, że zwykle nie obsługuje obrazów w ten sposób z Django.

Odpowiedz

11

Oto prosty przykład z django-openid project

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 
    """ 
+0

Jeżeli obawiasz się o wydajność, można również dekodować ciąg Base64 raz kiedy załadować moduł zamiast za każdym razem to jest wniosek: 'OPENID_LOGO = OPENID_LOG_BASE64 .decode ("base64") ' – dkamins

1

Możesz rozważyć użycie base64. Ale może się okazać, że zwiększenie wydajności jest prawie nieistotne, ponieważ obraz będzie przechowywany w pamięci podręcznej dysku. Byłbym zainteresowany, aby zobaczyć benchmarki dekodowania base64 vs dostęp do dysku. Może się nawet okazać, że ta optymalizacja przyniesie odwrotny skutek.

Edytuj: Znalazłem ten page on the linux disk cache, który może być interesujący podczas czytania przy podejmowaniu tej decyzji. Dopóki aktywność dysku nie jest zbyt duża, szanse na pojawienie się tego niewielkiego obrazu będącego częścią pamięci podręcznej dysku wydają się prawdopodobne.

Powiązane problemy