Cherrypy, carregue a imagem de Matplotlib, ou em geral
-
05-07-2019 - |
Pergunta
Não tenho certeza do que estou fazendo de errado, seria ótimo se você pudesse me indicar o que ler. Tomei o primeiro tutorial de Cherrypy "Hello World", acrescentou um pequeno enredo de matplotlib. Pergunta 1: Como sei onde o arquivo será salvo? Acontece que é onde estou executando o arquivo. Pergunta 2: Parece que não tenho a imagem para abrir/ver no meu navegador. Quando vejo a fonte no navegador, tudo parece certo, mas sem sorte, mesmo quando estou incluindo o caminho completo da imagem. Eu acho que meu problema está no caminho, mas não tenho certeza se a mecânica do que está acontecendo
Obrigado pela ajuda 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)
Solução
Abaixo estão algumas coisas que funcionaram para mim, mas antes de prosseguir, recomendo que você leia esta página sobre como configurar diretórios que contêm conteúdo estático.
Pergunta 1: Como sei onde o arquivo será salvo?
Se você ditar onde o arquivo deve ser salvo, o processo de descobriu deve se tornar mais fácil.
Por exemplo, você pode salvar arquivos de imagem em um subdiretório chamado "img" no seu diretório de aplicativos Cherrypy como este:
fig.savefig('img/test.png') # note: *no* forward slash before "img"
E então exiba assim:
return '<img src="/img/test.png" />' # note: forward slash before "img"
Pergunta 2: Parece que não é capaz de abrir a imagem/visualização no meu navegador.
Aqui está uma maneira de usar imagens estáticas disponíveis para um aplicativo 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)