CherryPy، قم بتحميل الصورة من matplotlib، أو بشكل عام
-
05-07-2019 - |
سؤال
لست متأكدًا من الخطأ الذي أفعله، سيكون من الرائع أن توجهني نحو ما أقرأه.لقد أخذت أول برنامج تعليمي لـ CherryPy "hello World" وأضفت القليل من مؤامرة 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)