Передача нескольких переменных на следующую HTML-страницу с помощью Flask (в частности, «Значение» и «Выбрано», а не только «Выбрано») - PullRequest
0 голосов
/ 06 мая 2019

Я использую Flask для создания формы HTML (выпадающее меню), где значения заполняются из списка значений (который выводится из функции python). Переменная в коде python app.py: " two_dimensional_list ". Примеры значений: [[ '001', 'Source1'] [ '342', 'Source2'], [ '968', 'Source5']] (по сути, это «идентификаторы» и «имена источников данных»). Код app.py выглядит следующим образом:

app.py

@app.route('/')
def index():
    #drop down list  (call Paxata to get a list of projects)
    two_dimensional_list = PaxMatch.get_datasource_configs(authorization_token,paxata_url)
    return render_template('index.html', datasources1=two_dimensional_list, datasources2=two_dimensional_list)

index.html

  <select name= datasource1 method="POST" action="/">
    {% for datasource1 in datasources1 %}
    <option value= "{{datasource1[0]}}">{{datasource1[1]}</option>"
    {% endfor %}
  </select>

Это работает нормально, и HTML-страница создается правильно, то есть:

<option value="001">Data Source 1</option>"
<option value="342">Data Source 2</option>"
<option value="968">Data Source 5</option>"

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я нажимаю кнопку отправки, единственное, что передается в «Step2.html» (следующая страница), это «значение» (то есть «ID»), а не описание". Мне нужны оба.

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

Спасибо за помощь, спасибо!

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Вот возможный обходной путь.

Определите переменную вашего двумерного списка вне функции:

two_dimensional_list = [['001','Source1'],['342','Source2'],['968','Source5']]

Определите вашу render_template() функцию:

@app.route('/')
def index():
    return render_template('index.html', two_dimensional_list=two_dimensional_list)

Настройте шаблон формы:

<form method="POST" action="{{ url_for('data') }}">
  <select name="datasource" method="POST" action="/post">
    {% for datasource1 in two_dimensional_list %}
    <option value= "{{datasource1[0]}}">{{datasource1[1]}}</option>"
    {% endfor %}
  </select>  
  <button type="submit">Submit</button>
</form>

Последнее, но не менее важное:

  1. Получить выбранное значение ID с помощью request.form.get
  2. Доступ к значению Описание с помощью description_value(select)
  3. Распечатать результат

@app.route('/data', methods=['GET', 'POST'])
def data():
    id_value = request.form.get('datasource')
    def description_value(select):
        for data in two_dimensional_list:
            if data[0] == select:
                return data[1]
    return description_value(id_value)
0 голосов
/ 06 мая 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...