【问题标题】:Write multiple html files in Python using for loop [duplicate]使用for循环在Python中编写多个html文件[重复]
【发布时间】:2017-08-28 20:17:47
【问题描述】:

您好,我正在使用 Python Flask 构建一个网站。

我需要在我构建的flask web中渲染大约5000个html页面,我做的方式如下。 所以,我的网站是关于股票市场的,我想为每家公司呈现一个 html 页面。我的做法是定义每个公司页面并使用不同的内容呈现相同的 html 文件。这样,我不需要制作 5,000 个不同的 html 文件,但我需要定义 5,000 个不同的@app.route,如下所示。我想知道是否有更聪明的方法来做到这一点。

@app.route('/analytics/signals/aapl')
def analytics_signals_aapl_page():
    all_ticker = full_list
    ticker_name = com_name
    ticker = 'AAPL'
    return render_template('company.html', all_ticker=all_ticker, ticker_name=ticker_name, ticker=ticker)

@app.route('/analytics/signals/ddf')
def analytics_signals_ddf_page():
    all_ticker = full_list
    ticker_name = com_name
    ticker = 'DDF'
    return render_template('company.html', all_ticker=all_ticker, ticker_name=ticker_name, ticker=ticker)

@app.route('/analytics/signals/aey')
def analytics_signals_aey_page():
    all_ticker = full_list
    ticker_name = com_name
    ticker = 'AEY'
    return render_template('company.html', all_ticker=all_ticker, ticker_name=ticker_name, ticker=ticker)

这是company.html文件的一部分,根据Python中每个页面定义中的变量放置不同的内容。

<section style="margin-top: 0px; background-color: #E6E6FA; padding: 0px; width:100%;">

        <div class="container">


                <h1 style="margin-top:10px; font-size: 25px;">{{ all_ticker[ticker_name[ticker]].split(':')[1] }} </h1>
                <p style="margin-top: -5px; margin-left: 2px; color:#9932CC; font-size: 10px;">Ticker: {{ all_ticker[ticker_name[ticker]].split(':')[0] }}, Sector: {{ all_ticker[ticker_name[ticker]].split(':')[2] }}, Industry: {{ all_ticker[ticker_name[ticker]].split(':')[3] }}</p>



        </div>

如果你知道任何更聪明的方法来做到这一点,请告诉我。我很感激。谢谢!

我尝试过的东西如下:

ticker_list = ['company1','company2','company3','company4','company5', ......'company5000']
for i in ticker_list:
    @app.route('analytics/signals/%s'.format(i))
    def analytics_signals_aapl_page():
        all_ticker = full_list
        ticker_name = com_name
        ticker = i
        return render_template('company.html', all_ticker=all_ticker, ticker_name=ticker_name, ticker=ticker)

不过好像不行.... 请帮帮我。

【问题讨论】:

    标签: javascript python html flask


    【解决方案1】:

    首先,不要为每个代码创建一个路由,而是考虑将路由参数化,如下所示:

    @app.route('/analytics/signals/<ticker_url>')
    def analytics_signals_aapl_page(ticker_url):
        all_ticker = full_list
        ticker_name = com_name
        ticker = ticker_url.upper()
        return render_template('company.html', all_ticker=all_ticker, ticker_name=ticker_name, ticker=ticker)
    

    除此之外,为什么要为每个代码创建一个页面?当您想查看不同的股票时,这会迫使您的浏览器重新渲染所有内容...

    您可以考虑使用前端框架,例如:Google PolymerReact。将数据动态绑定到页面(前端 MVC 模型

    如果不是,您仍然可以使用 jQuery DOM 操作和 AJAX 请求来创建 SPA(单页应用程序)。

    【讨论】:

    • 非常感谢!!但在这种情况下,“ticker_url”是什么?它是股票行情的清单吗?还是像 'aapl' 这样的单一股票代码?这样,我仍然需要创建 5,000 个不同的定义,对吗?你能更具体地解释一下吗?
    • ticker_urlaaplgoog 或用户在 /analytics/signals/... 之后键入的任何内容。但是不,您不再需要这条路线,因为现在所有股票都可以引用为/analytics/signals/aapl/analytics/signals/goog,它会在正确的上下文中正确呈现页面
    • 哦,成功了。第一行应该是 @app.route('/analytics/signls/') 对吗?不只是 非常感谢!!!
    • 可以(我会做出改变)。很高兴它对你有效!如果此答案解决了您的问题,请务必标记为已接受
    猜你喜欢
    • 2022-06-15
    • 2014-10-09
    • 1970-01-01
    • 2021-07-06
    • 2020-03-17
    • 1970-01-01
    • 2017-08-26
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多