ich generiere mit ReportLab einen Graphen und würde diesen gerne (mittels Bottle) auf einer Webseite ausgeben. Den Graphen möchte ich aber nicht auf der HD speichern, sondern in einen String bzw. cStringIO-Objekt schreiben. Das Problem ist, dass HTML `<img src="...">` eine Datei erwartet...
Der Code, der nicht funktioniert, sieht so aus:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*
import bottle
import cStringIO
from PIL import Image as PILI
from reportlab.graphics.shapes import *
from reportlab.graphics import renderPM
from reportlab.graphics.charts.piecharts import Pie
@bottle.route('/test')
def test():
graph = build_graph()
return bottle.template('html_test.tpl',graph = graph)
def build_graph():
buf = cStringIO.StringIO()
d = Drawing(200,100)
pc = Pie()
pc.x = 65
pc.y = 15
pc.width = 70
pc.height = 70
pc.data = [10,20,30,40]
pc.labels = ['a','b','c','d']
d.add(pc)
renderPM.drawToFile(d,buf,'PNG')
buf.reset()
im = PILI.open(buf)
im.load()
return im
bottle.debug(True)
bottle.run(reloader=True)
Code: Alles auswählen
<h1>Graph Test</h1>
<p>Text Text Text 1</p>
<img src="{{graph}}" alt="Ein Graph">
<p>Text Text Text 2</p>
Gruß, noisefloor