Как динамически изменять путь к изображению с помощью Flask - PullRequest
0 голосов
/ 19 июня 2020

Привет, есть ли способ динамически загружать разные изображения, когда я попадаю в свое приложение flask? У меня есть 10 изображений, каждое из которых названо 'accueil_X' с X 0,1,2, ...

app.py

@app.route('/', methods=("POST", "GET"))
def home():
    random = randrange(10)
    random_pix = 'accueil_'+str(random)+'.png' 

HTML

<img src="{{url_for('static', filename='+{{ random_pix }}+')}}" width=100%, alt="">

Кажется, Jinja загружает изображение с именем +{{ random_pix }}+: Как я могу это исправить? спасибо

Ответы [ 2 ]

1 голос
/ 26 июня 2020

, поэтому вы хотите загружать случайное изображение с каждым обновлением sh домашней страницы:

@app.route('/', methods=("POST", "GET"))
def home():
    random = randrange(10)
    random_pix = 'accueil_'+str(random)+'.png'

    [..]
    # i added this missing line to get code more clear
    return render_template('home.html', random_pix=random_pix)

Jinja, кажется, загружает изображение с именем + {{random_pix}} + : Как я могу это исправить?

это просто, просто удалите {{ }} вокруг переменной random_pix

<img src="{{ url_for('static', filename='\'' + random_pix + '\'') }}" width=100%, alt="">

jinja2 использует {{ .. }} для оценки любого допустимого выражения

обратитесь к этому do c

1 голос
/ 19 июня 2020

Вы можете сделать это с помощью обработчика контекста , который является эквивалентом «тега шаблона» Django.

Это можно использовать для передачи нескольких переменных всем шаблоны или передать функцию, которая затем может быть вызвана во всех шаблонах.

Сначала импортируйте необходимые модули и инициализируйте приложение:

from flask import Flask, url_for, render_template
from random import randrange

app = Flask(__name__)

Затем определите обработчик контекста:

@app.context_processor
def utility_processor():
    def random_image():
        number = randrange(10)
        f = 'accueil_' + str(number) + '.png' 
        return url_for('static', filename=f)
    return dict(rand_im=random_image)

Обратите внимание, что вы передали функцию random_image, которую затем можно вызвать в шаблоне как rand_im. Вместо того, чтобы помещать вызов url_for в шаблон, вы сделали это в Python.

Таким образом, вы можете отобразить это следующим образом в любом шаблоне:

<img src="{{ rand_im() }}" width="100%" />
...