使用烧瓶使用图像替换字符串中的文本

时间:2018-07-09 07:37:37

标签: python flask

我编写了一段代码,该字符串与字符串中是否包含任何模式的文本都匹配。someExtension,就我而言,它将是字符串中的fileName.png,将其转换为img标签并显示在HTML文件上使用python和flask。让我们以示例字符串为例: “此程序的输出是什么?e.png” 代码与e.png匹配,然后将其替换为

"<br><img src="{{url_for('static', filename='pics/e.png')}}" /><br>"

图像e.png放在静态文件夹内的文件夹pics中。 如果即使将该字符串添加到Markup(),也将其推入flask变量中,它不会渲染图像,但会显示以下输出。

output on html page

为什么会这样?有什么方法可以显示图像e.png?

我的代码是:

import re
from flask import Flask,  Markup, render_template
app = Flask(__name__)

def rep(x):
    text = re.findall(r'\w+[.]\w+', x)
    for i in text:
        b ="<img src=\"{{ url_for('static',filename='pics/"+i+"')}}\">"
        x=x.replace(i,b)
    return x

@app.route('/')
def home():
    a = "What is the output of this program? e.png"
    a = rep(a)
    return render_template('new.html',var=Markup(a))

if __name__ == '__main__':
    app.run(debug=True, host='localhost', port=8032)

HTML文件是

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>

<body>
  {{var}}
</body>

</html>

1 个答案:

答案 0 :(得分:0)

问题在于,您传递给模板的值是一个字符串,即使您插入的字符串是用{{括号格式化的,flask也不解释那些值。请注意,如果您查看投放的html,它实际上包含字符串'url_for'...

您甚至也没有从flask导入url_for函数,因此无论如何都不会起作用。

解决方案:

import re
from flask import Flask, url_for, Markup, render_template
app = Flask(__name__)

def rep(x):
    text = re.findall(r'\w+[.]\w+', x)
    for i in text:
        b ="<img src='" + url_for('static', filename='pics/'+i) + "'>"
        x=x.replace(i,b)
    return x

@app.route('/')
def home():
    a = "What is the output of this program? e.png"
    a = rep(a)
    return render_template('new.html', var=Markup(a))

@app.route('/static/<path:path>')
def static_file(path):
    return send_from_directory('static', path)

if __name__ == '__main__':
    app.run(debug=True, host='localhost', port=8032)

html文件可以保持不变。此解决方案

  • 分别告诉Flask服务器在/ static页面下监听并提供静态文件。
  • 通过字符串连接使用图像URL创建html,而不是尝试使用模板呈现。