我有一个表单,允许用户输入一些文本以及用户提交表单时。 返回该文本并使用该文本的PIL模块生成图像。
@app.route('/enter')
def index():
img = Image.new('RGB',(1000,1000))
txt=request.form['text']
font=ImageFont.truetype("ariel.ttf",30)
draw = ImageDraw.Draw ( img )
draw.text ( ( 0 , 0), txt, font=font, fill="#000000" )
io = StringIO()
img.save(io, format='png')
data = io.getvalue().encode('base64')
return render_template('index.html',data=data)
然后将此动态图像转发到显示
的网页<img src="data:image/png;base64,{{data}}" > // html shows the image
但这需要重新加载或刷新页面。是否可以使用javascript或json获取表单数据并呈现图像而不刷新页面。 此外,我使用选项卡显示页面的内容,这个img根据用户响应动态更新包含在#tab4中 如何在烧瓶中设置网址:
@app.route('/enter#tab4', methods=[ 'POST'])
或只是
@app.route('/enter', methods=[ 'POST'])
答案 0 :(得分:3)
做这样的事情:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type=text/javascript>
$(function() {
$('a#cal').bind('click', function() {
$.getJSON('/t', {
aa: $('input[name="text"]').val(),
}, function(data) {
$('#result').html('<img src="data:image/png;base64,' + data.result + '" />');
});
return false;
});
});
</script>
并在html中:
<form>
<input type="text" size="5" name="text">
<span id="result">
</span>
<a href="javascript:void();" id="cal">calculate server side</a>
</form>
只需在你的python代码中创建一个函数
@app.route('/t')
def pre():
tx = request.args.get('aa', 0, type=str)
//call function to perform some function on tx and then convert it to base64
return jsonify(result=data)
这应该符合您的目的。不需要重新加载或刷新。