CherryPy, загрузите изображение из matplotlib или вообще - PullRequest
4 голосов
/ 22 октября 2009

Я не уверен, что я делаю неправильно, было бы здорово, если бы вы указали мне, что читать. Я взял первый урок по CherryPy «Привет, мир», добавил небольшой сюжет matplotlib. Вопрос 1: как узнать, где будет сохранен файл? Это происходит там, где я запускаю файл. Вопрос 2: я не получаю изображение, чтобы открыть / просмотреть в моем браузере. Когда я просматриваю источник в браузере, все выглядит правильно, но не повезло, даже если я включаю полный путь к изображению Я думаю, что моя проблема с траекторией, но я не уверен в механике происходящего

спасибо за помощь Винсент

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)

1 Ответ

5 голосов
/ 22 октября 2009

Ниже приведены некоторые вещи, которые помогли мне, но прежде чем продолжить, я рекомендую вам прочитать эту страницу о том, как настроить каталоги, содержащие статическое содержимое.

Вопрос 1. Как узнать, где будет сохранен файл?
Если вы указываете, где файл должен быть сохранен, процесс его поиска должен стать проще.
Например, вы можете сохранить файлы изображений в подкаталоге img в каталоге вашего приложения CherryPy, например:

fig.savefig('img/test.png') # note:  *no* forward slash before "img"

А затем отобразить так:

return '<img src="/img/test.png" />' # note:  forward slash before "img"

Вопрос 2. Кажется, я не могу [открыть] изображение, чтобы открыть / просмотреть его в своем браузере.
Вот один из способов сделать статические изображения доступными для приложения 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)
...