CherryPy, загрузите изображение из matplotlib или вообще

StackOverflow https://stackoverflow.com/questions/1603669

  •  05-07-2019
  •  | 
  •  

Вопрос

Я не уверен, что я делаю неправильно. Было бы здорово, если бы вы указали мне, что читать. Я взял первый урок по 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. Как узнать, где будет сохранен файл?
Если вы указываете, где файл должен быть сохранен, процесс его поиска должен стать проще.
Например, вы можете сохранить файлы изображений в подкаталог с именем " 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top