Я пытаюсь динамически выбрать с помощью python изображение и использовать его на веб-сайте, есть ли способ для этого работать? - PullRequest
0 голосов
/ 22 декабря 2019

Это мой код 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, если это поможет)

1 Ответ

0 голосов
/ 22 декабря 2019

Ваш подход к созданию HTML-сущностей в ваших представлениях и последующей передаче их в ваши шаблоны - это анти-паттерн Flask / Jinja.

Что это значит, вам нужно разделить логику между вашим бэкэндом (вашими представлениями) иваши визуализированные шаблоны (часть Jinja).

Вот почему, когда вы применяете фильтр safe в своем шаблоне, вы в конечном итоге скажете Jinja Just 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)

index.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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...