Python - flask - jinja2 - Динамически генерировать маршруты и функции, просматривая значения - PullRequest
0 голосов
/ 17 декабря 2018

Привет, я довольно новичок в flask и python.

. Я пытаюсь создать простое веб-приложение, которое перечисляет несколько номеров Магазина и, нажав на гиперссылку, загружается CSV-файл (я получаю эти данные из SQLсервер - положить его во фрейм данных и использовать to_csv для преобразования его в csv на лету)

Моя проблема в том, как мне динамически сгенерировать маршрут @ app.route ("/ getCSV/ "и def getCSV ..)?

Любая помощь будет принята с благодарностью.

В нижнем регистре содержится только 2 магазина, в дальнейшем этот показатель может увеличиться до 5 или 100 ..

Я вставил приведенный ниже код, я использую Jinja-шаблоны в html

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>

1 Ответ

0 голосов
/ 17 декабря 2018

Вам нужны аргументы 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"})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...