如何将turbogears中的原始图像数据传递给scr = data:image / jpg的mako模板

时间:2013-01-30 21:54:49

标签: base64 mako turbogears turbogears2

我想将TurboGears2中的原始图像数据传递给mako模板,以便在img标签中使用

(即,scr = data:image / jpg,base64,$ {imagedata})。

从sql server图像格式

中检索图像

我一直在努力做到这一点,因为传递给模板的所有东西都在unicode中,当模板试图打开它时,我得到“UnicodeDecodeError:'ascii'编解码器无法解码字节...”。

这样可以在多次调用/image?image#x.jpg上节省大量时间。

1 个答案:

答案 0 :(得分:1)

以下工作在修改quickstart ed edboGears 2.2.2项目时,配置为使用Mako模板系统。首先,我对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}" />

上面的代码使用Python 2.7.3进行了测试。我不知道您的数据库图像格式或编码与从普通图像文件加载的数据有何不同。