我正在尝试使用 python 动态选择图像并在网站上使用它,有没有办法做到这一点?



这是我的python代码-

file1 = '2D.jpg'
file2 = '3D.jpg'
s = f"""
<img src="{{url_for('static', filename='{file1}')}}" />
<img src="{{url_for('static', filename='{file2}')}}" />
"""
return render_template("index.html", s = s)

和我的 HTML 使用该变量

<p>
{{ s }}
</p>

而不是像我想要的那样显示图像,它只显示我编写的 HTML 代码。有什么修复的想法吗?(如果有帮助,我正在使用Jinja2(

在视图中生成 HTML 实体然后将它们传递给模板的方法是 Flask/Jinja 反模式。

这意味着,您需要分离后端(视图(和渲染模板(Jinja 部分(之间的逻辑。

这就是为什么当您在模板中应用safe过滤器时,您最终会告诉 JinjaJust show me this string as HTML and don't process it.因此,保存 Jinja 变量和方法的实体无法很好地呈现。

因此,解决问题的简单方法是仅传递要呈现的图片列表,并在模板本身中执行模板逻辑。

这是一个工作示例:

app.py:

from flask import Flask, render_template
from flask.views import MethodView
application = Flask(__name__)

class IndexView(MethodView):
def get(self):
filenames = ['file1.jpg', 'file2.jpg']
return render_template('index.html', filenames=filenames)

application.add_url_rule('/', view_func=IndexView.as_view('index'))
if __name__ == '__main__':
application.run(debug=True)

索引.html:

<html>
<body>
{% for filename in filenames %}
<img src="{{url_for('static', filename=filename)}}" />
{% endfor %}
</body>
<html>

当你加载应用的网站时,你会有这个HTML块:

<html>
<body>
<img src="/static/file1.jpg" />
<img src="/static/file2.jpg" />
</body>
<html>

相关内容

最新更新