2011-12-13 10 views
10

画像データを返すビューが必要です。そうdjango:ビューから画像データを返す

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

の線に沿って何か私は、画像データを取得するためにfile.read()を行うことができます知っているが、画像は(1×1ピクセルのような)が小さいので、私は単なる文字列オブジェクト(または何としてそれを保存したいです私のコードでコピーして貼り付けることができるオブジェクト)。このようにして、ビューがヒットするたびにディスクのルックアップを保存します。

どうすればよいですか?私はこれが簡単だと確信しています、私は単に検索のためにどのような用語を使用するか分かりません。

p.s.私はDjangoで通常このように画像を提供していないことを知っています。

答えて

11

は、パフォーマンスに関係している場合は、モジュールの代わりに、それが要求されるたびにロードするとき、あなたも一度Base64文字列をデコードすることができ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

からの簡単な例です。 .decode( 'base64') ' – dkamins

1

base64を使用することをおすすめします。しかし、イメージがディスクキャッシュに保存されるため、パフォーマンスの向上はほとんど無関係であることがわかります。私はbase64のデコードとディスクアクセスのベンチマークを見ることに興味があります。この最適化が逆の効果を持つことさえあります。

編集:私はこの決定を下すときにおもしろいかもしれないpage on the linux disk cacheを見つけました。ディスクアクティビティがあまり高くない限り、この小さなイメージがディスクキャッシュの一部になる可能性は高いようです。 `OPENID_LOGO = OPENID_LOG_BASE64:ここ

関連する問題