Создание различных функций в al oop - Flask / Python - PullRequest
0 голосов
/ 17 июня 2020

В настоящее время я работаю со средой flask, и мне нужно иметь возможность создать из словаря веб-страницу для каждого элемента этого словаря.

Итак, я начал с идеи создания этих страницы через a для l oop, которые будут проходить через словарь:

from flask import Flask
app = Flask(__name__)

test={}
test["Louvre_Museum"]= "Rue de Rivoli, 75001 Paris"
test["Eiffel_Tower"]="Champ de Mars, 5 Avenue Anatole France, 75007 Paris"
test["Triumphal_Arch"]="Place Charles de Gaulle, 75008 Paris"
monum = []
for cle in test.keys():
    monum.append(cle)


@app.route('/')
def index():
    return "HOMEPAGE TEST !"

for i in range(len(monum)):
    @app.route('/monum'+str(i)+'')
    def monum_i():
        name_monum = monum[i]
        adress_monum = test[nom_monum]
        return "Nom: {} --- Adresse: {}".format(name_monum, adress_monum)

if __name__ == '__main__':
    app.run()

Программа работает правильно, пока не достигнет определения функций.

Я хотел создать различные функции в l oop называется: «monum_0, monum_1, monum_2 et c ...), который не работает.

Для python« monum_i »- это просто строка и есть только одна функция который создается с таким именем.

И это проблема для второго прохода в l oop, где программа определяет функцию, которая уже существует, и поэтому у меня есть ошибка.

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

Ответы [ 3 ]

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

Нет, это не работает, и это совсем не рекомендуемый способ делать что-то в бэкэнде.

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

Например:

from flask import request

...

@app.route('/monum')
def monum():
    name_monum = request.args.get('name_monum')
    adress_monum = test[nom_monum]
    return "Nom: {} --- Adresse: {}".format(name_monum, adress_monum)

(и не забывайте обрабатывать ошибки)

0 голосов
/ 17 июня 2020

Я не могу комментировать, поэтому добавляю свой ответ в качестве ответа;

Вы вызываете функцию где-нибудь? «@app.route('/monum'+str(i)+'')» должен это делать? Если да, то не должно ли это быть «@app.route('/monum_'+str(i)+'')»? В противном случае было бы проще применить "Nom: {} --- Adresse: {}".format(monum[i], test[monum[i]]) в for l oop, чтобы не создавать много функций, которые вы использовали бы только один раз.

0 голосов
/ 17 июня 2020

Это не дает прямого ответа на ваш вопрос, но вы можете рассмотреть возможность использования переменной в URL-адресе.

@app.route('/monum/<page>')
def index(page):
  if page in monum:
      return "Nom: {} --- Adresse: {}".format(page, monum[page])
  # raise a 404 or something
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...