2017-01-04 16 views
5

मैं फ्लास्क ऐप पर उपयोगकर्ता इनपुट के आधार पर गतिशील भूखंड बनाना चाहता हूं। हालांकि मैं निम्न त्रुटि हो रही है: स्ट्रिंग तर्क की उम्मीद, मिल गया 'बाइट'फ्लास्क पर प्रदर्शित करने के लिए गतिशील भूखंड कैसे बनाएं?

अगर मैं io.BytesIO() का उपयोग करें, मैं यह त्रुटि नहीं मिल रहा है, लेकिन मैं test.html

पर भूखंड नहीं मिल रहा है
from flask import Flask 
from flask import render_template 
import matplotlib.pyplot as plt 
import io 
import base64 

app = Flask(__name__) 

@app.route('/plot') 
def build_plot(): 
    img = io.StringIO() 
    y = [1,2,3,4,5] 
    x = [0,2,1,3,4] 
    plt.plot(x,y) 
    plt.savefig(img, format='png') 
    img.seek(0) 

    plot_url = base64.b64encode(img.getvalue()) 
    return render_template('test.html', plot_url=plot_url) 

if __name__ == '__main__': 
    app.debug = True 
    app.run() 

test.html

<!DOCTYPE html> 
<html> 
<title> Plot</title> 
<body> 
<img src="data:image/png;base64, {{ plot_url }}"> 
</body> 
</html> 
+0

हमेशा प्रश्न में पूर्ण त्रुटि संदेश दिखाएं (ट्रेसबैक) अन्य उपयोगी जानकारी भी हैं। – furas

उत्तर

6

उपयोग BytesIO और बाद में decode()

कार्य उदाहरण

from flask import Flask 
#from flask import render_template 
import matplotlib.pyplot as plt 
import io 
import base64 

app = Flask(__name__) 

@app.route('/plot') 
def build_plot(): 

    img = io.BytesIO() 

    y = [1,2,3,4,5] 
    x = [0,2,1,3,4] 
    plt.plot(x,y) 
    plt.savefig(img, format='png') 
    img.seek(0) 

    plot_url = base64.b64encode(img.getvalue()).decode() 

    return '<img src="data:image/png;base64,{}">'.format(plot_url) 

if __name__ == '__main__': 
    app.debug = True 
    app.run() 
+0

धन्यवाद! अपेक्षित के रूप में काम किया। – RRC

संबंधित मुद्दे