CherryPy, cargar imagen desde matplotlib, o en general
-
05-07-2019 - |
Pregunta
No estoy seguro de lo que estoy haciendo mal. Sería genial si pudiera indicarme qué leer. He tomado el primer tutorial de CherryPy "hello world" Añadió una pequeña parcela de matplotlib. Pregunta 1: ¿cómo sé dónde se guardará el archivo? Sucede que es donde estoy ejecutando el archivo. Pregunta 2: Parece que no consigo que la imagen se abra / vea en mi navegador. Cuando veo la fuente en el navegador, todo se ve bien pero sin suerte, incluso cuando estoy incluyendo la ruta completa de la imagen. Creo que mi problema está en el camino, pero no estoy seguro de la mecánica de lo que está sucediendo
gracias por la ayuda Vincent
import cherrypy
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
class HelloWorld:
def index(self):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1,2,3])
fig.savefig('test.png')
return ''' <img src="test.png" width="640" height="480" border="0" /> '''
index.exposed = True
import os.path
tutconf = os.path.join(os.path.dirname(__file__), 'tutorial.conf')
if __name__ == '__main__':
cherrypy.quickstart(HelloWorld(), config=tutconf)
else:
cherrypy.tree.mount(HelloWorld(), config=tutconf)
Solución
A continuación hay algunas cosas que me han funcionado, pero antes de continuar, le recomiendo que lea esta página sobre cómo configurar los directorios que contienen contenido estático.
Pregunta 1: ¿Cómo puedo saber dónde se guardará el archivo?
Si determina dónde debe guardarse el archivo, el proceso de encontrarlo debería ser más fácil.
Por ejemplo, puede guardar archivos de imágenes en un subdirectorio llamado " img " dentro de su directorio de aplicaciones CherryPy como este:
fig.savefig('img/test.png') # note: *no* forward slash before "img"
Y luego se muestra así:
return '<img src="/img/test.png" />' # note: forward slash before "img"
Pregunta 2: Parece que no soy capaz de obtener la imagen para abrir / ver en mi navegador.
Esta es una forma que he utilizado para hacer que las imágenes estáticas estén disponibles para una aplicación CherryPy:
if __name__ == '__main__':
import os.path
currdir = os.path.dirname(os.path.abspath(__file__))
conf = {'/css/style.css':{'tools.staticfile.on':True,
'tools.staticfile.filename':os.path.join(currdir,'css','style.css')},
'/img':{'tools.staticdir.on':True,
'tools.staticdir.dir':os.path.join(currdir,'img')}}
cherrypy.quickstart(root, "/", config=conf)