瓶的Python。如何在Flask中使用外部模块并将数据传递给html?

时间:2018-06-13 19:14:20

标签: python flask

我正在构建桌面应用UI,并且我试图将所有内容移到Flask中,因此我可以在html/css/boostrap中展示所有内容。

但是下面的代码不起作用。

如何在found.productId上显示ali.html和其余循环?

app.py

from aliexpress_api_client import AliExpress

@app.route('/ali')
def ali():
    aliexpress = AliExpress('1234', 'bazaarmaya')

    data = aliexpress.get_product_list(['productId', 'productTitle', 'salePrice', 'originalPrice', 'imageUrl'],
                                       keywords="shoes", pageSize='40')
    for product in data['products']:
        productId = product['productId']
        productTitle = product['productTitle']
        salePrice = product['salePrice']
        originalPrice = product['originalPrice']
        imageUrl = product['imageUrl']
        founds = print(productId, productTitle, salePrice, originalPrice, imageUrl)

    if founds == founds:
        return render_template('ali.html', founds=founds)

    return render_template('ali.html')

ali.html

{% extends 'layout.html' %}

{% block body %}
 <table>
     <tr>
         {% for found in founds %}
         <td>{{found.productId}}</td>
         <td>{{found.productTitle}}</td>
         <td>{{found.salePrice}}</td>
         <td>{{found.originalPrice}}</td>
         <td>{{found.imageUrl}}</td>
         {% endfor %}
     </tr>
 </table>
{% endblock %}

1 个答案:

答案 0 :(得分:0)

第一个问题是print()返回 None。所以:

founds = print(productId, productTitle, salePrice, originalPrice, imageUrl)

等同于founds = None。基本没用。

所以,首先要做的是给founds一个结构。您的选项基本上是dictlist。在您的示例中,列表最简单(但不一定是您的实际代码):

<强> app.py

from aliexpress_api_client import AliExpress

@app.route('/ali')
def ali():
    aliexpress = AliExpress('1234', 'bazaarmaya')

    data = aliexpress.get_product_list(['productId', 'productTitle', 'salePrice', 'originalPrice', 'imageUrl'],
                                       keywords="shoes", pageSize='40')
    for product in data['products']:
        productId = product['productId']
        productTitle = product['productTitle']
        salePrice = product['salePrice']
        originalPrice = product['originalPrice']
        imageUrl = product['imageUrl']
        founds = [productId, productTitle, salePrice, originalPrice, imageUrl]

    return render_template('ali.html', founds=founds)

注意:这里有两个问题。 for循环将覆盖每个循环上的数据,因此您可能需要一个字典,但您需要为其提供唯一键。或者您事先定义一个列表并在循环中应用它。 此示例仅为您提供循环中的最后一项,由您决定处理

然后:

<强> ali.html

{% extends 'layout.html' %}

{% block body %}
 <table>
     <tr>
         {% for found in founds %}
         <td>{{found}}</td>
         <td>{{found}}</td>
         <td>{{found}}</td>
         <td>{{found}}</td>
         <td>{{foundl}}</td>
         {% endfor %}
     </tr>
 </table>
{% endblock %}

如果您将字典传递给模板并希望按键访问,则可以使用.表示法。但是首先要解决其他问题所以这个答案可能会导致进入太多深度的风险。 jinja2语法(在模板中)与常规python非常相似。