Как создать кнопку HTML-таблицы для каждой строки и ввести значение первого столбца в функцию Flask для запроса

#python #html #mysql #flask #jinja2

Вопрос:

У меня есть HTML — таблица, в которой я хочу иметь кнопку «подробнее» для каждой строки в последнем столбце.

Я хочу иметь возможность, когда я нажмите на кнопку «Подробнее» кнопку для каждой строки, значение месяца (это первая колонка таблицы, например: ‘2021-10’) для этой конкретной строки вышлем в колбу функцию для запроса информация только для этого конкретного месяца, а затем браузер будет перейти в другой HTML-файл (monthly_sales_report_sub.html), в которых новая информация в виде таблицы, которая содержит одну строку.

Каков наилучший способ заставить работать HTML-код и функцию flask? Мой текущий код покажет все записи за месяцы на monthly_sales_report_sub.html

Заранее спасибо!

Приведенный ниже HTML-код (monthly_sales_report.html):

 lt;table width=80%gt;  lt;!-- Show Report Table --gt;  lt;theadgt;  lt;trgt;  {% for header in headings %}  lt;thgt;{{ header }}lt;/thgt;  {% endfor %}  lt;/trgt;  lt;/theadgt;  lt;tbodygt;  {% for row in data %}  lt;trgt;  {% for cell in row %}  lt;tdgt;{{ cell }}lt;/tdgt;  {% endfor %}  lt;td class="td-actions text-right"gt;  lt;a href=monthly_sales_report_subgt;lt;input type="submit" value="more details"gt;lt;lt;/inputgt;lt;/agt;  lt;/tdgt;  lt;/trgt;  {% endfor %}  lt;/tbodygt;  lt;/tablegt;  

Моя текущая функция колбы выглядит следующим образом:

 @api.route('/monthly_sales_report', methods=['GET']) def monthly_sales_table():  return render_template("monthly_sales_report.html", headings=SQL_Operations.get_monthly_sales_report(connection)['headings'], data=SQL_Operations.get_monthly_sales_report(connection)['rows'])  @api.route('/monthly_sales_report_sub', methods=['GET']) def monthly_sales_table_sub():  return render_template("monthly_sales_report_sub.html", headings=SQL_Operations.get_monthly_sales_report_sub(connection)['headings'], data=SQL_Operations.get_monthly_sales_report_sub(connection)['rows'])  

SQL_Operations.py

 def get_monthly_sales_report_sub(connection):  cursor = connection.cursor()  query = ("""SELECT month, sales_person, total_num_sold, total_sales FROM Sale;""")  cursor.execute(query)  res = []  for (month, sales_person, total_num_sold, total_sales) in cursor:  res.append([month, sales_person, total_num_sold, total_sales])  res_new = dict()  res_new['headings'] = ['month', 'sales_person', 'total_num_sold', 'total_sales']  res_new['rows'] = res  return res_new  

Ответ №1:

В flask вы можете создавать маршруты с аргументами

 @app.route('/detail/lt;monthgt;',methods = ['GET'])  

В вашей таблице вы можете использовать кнопку или кнопку с тегом с:

 lt;a href={{ url_for('detail',month = your_row_month_value) }} ...   

Вы должны добавить url_for в свой импорт колбы