0

TurboGears2 の生の画像データを mako テンプレートに渡して img タグで使用したい

(つまり、scr=data:image/jpg,base64,${imagedata})。

画像はSQLサーバーの画像形式から取得されます

テンプレートに渡されるものはすべてユニコードであり、テンプレートがそれを開こうとすると「UnicodeDecodeError:'ascii' コーデックはバイトをデコードできません...」と表示されるため、これを行うのに苦労しています。

これにより、/image?image#x.jpg への複数回の呼び出しにかかる時間を大幅に節約できます。

4

1 に答える 1

3

quickstart以下は、Makoテンプレートシステムを使用するように構成されたTurboGears2.2.2ベースのプロジェクトを変更するときに機能します。最初に私はいくつかの変更を加えましたexample/controllers/root.py

# …
from tg import config
import os
import base64

class RootController(BaseController):
    # …
    def _file_to_base64(self, path):
        with open(path, 'r') as stream:
            image_data = base64.b64encode(stream.read())

        return 'data:image/{0};base64,{1}' \
               .format(path.rsplit('.', 1)[-1].lower(), image_data)

    @expose('example.templates.index')
    def index(self):
        """Handle the front-page."""

        filename = os.path.join(config['paths']['static_files'],
                                'images', 'turbogears_logo.png')

        return dict(page='index', image_data=self._file_to_base64(filename))

次に、makeテンプレートのコードは次のようになります。

<img src="${image_data}" />

上記のコードは、Python2.7.3を使用してテストされました。データベースの画像形式またはエンコーディングが、プレーンな画像ファイルから読み込まれるデータとどのように異なるのかわかりません。

于 2013-02-01T00:18:40.483 に答える