[英]Python - flask - jinja2 - Dynamically generating routes and functions by looping through values
嗨,我對flask和python很陌生
我正在嘗試創建一個簡單的Web應用程序,其中列出了多個商店編號,然后單擊超鏈接,下載了一個csv文件(我正在從SQL Server獲取此數據-將其放入數據框並使用to_csv將其轉換為csv飛行中)
我的問題是-如何動態生成路由@ app.route(“ / getCSV /”和def getCSV ..)?
任何幫助將不勝感激。
下面的案例僅包含2家商店,以后可能會增加到5家或100家。
我粘貼了下面的代碼,我在HTML中使用Jinja模板
app.py
from flask import Flask, render_template, redirect, request, Response
from datetime import datetime
import pandas as pd
import pyodbc
#Define app
app = Flask(__name__)
#Db connection
ikbconn = pyodbc.connect('Driver={SQL Server};Server=xxxxx;Database=xx;uid=sa;pwd=xxxxx')
storelist = ['11','72']
@app.route("/")
def hello():
return render_template('template.html',my_storelist = storelist)
@app.route("/getCSV/11")
def getCSV11():
selectquery = "EXEC temp_POGListSP" + " " + "11"
data = pd.read_sql(selectquery, ikbconn)
csv11 = data.to_csv()
return Response(
csv11,mimetype="text/csv",headers={"Content-disposition":"attachment; filename=POGList_11.csv"})
@app.route("/getCSV/72")
def getCSV72():
selectquery = "EXEC temp_POGListSP" + " " + "72"
data = pd.read_sql(selectquery, ikbconn)
csv72 = data.to_csv()
return Response(
csv72,mimetype="text/csv",headers={"Content-disposition":"attachment; filename=POGList_72.csv"})
app.run(debug=True)
template.html
<html>
<body>
<h2>Planogram List for Stores</h2>
{% for n in my_storelist %}
<p><a href="/getCSV/{{ n }}"> {{ n }} </a></p>
{% endfor %}
</body>
</html>
您需要url參數:
@app.route("/getCSV/<int:store_id>")
def get_store_csv(store_id):
selectquery = "EXEC temp_POGListSP" + " " + str(store_id)
data = pd.read_sql(selectquery, ikbconn)
table = data.to_csv()
return Response(
table,mimetype="text/csv",headers={"Content-disposition":"attachment; filename=POGList_" + str(store_id) + ".csv"})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.