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)
Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top