对于在html页面中看不到的烧瓶循环

时间:2017-07-18 12:47:37

标签: python flask jinja2

我实际上是想在flask模板中打印一个for循环,我使用了不同的方法,但html页面上没有任何内容,python代码工作正常,我只是不知道如何用jinja实现它。< / p>

Views.py

@app.route('/results', methods=['POST', 'GET'])
def results():

    keyword = {'keyword': request.args.get('keyword')} # First Method
    keyword = request.form['keyword'] # Second Method

    num_tweets=5

    for tweet in tweepy.Cursor(api.search,q=str(keyword)+
        " -filter:retweets",
        result_type='recent',
        lang="en").items(num_tweets):
        clean = re.sub(r"(?:@\S*|#\S*|http(?=.*://)\S*)", "", tweet.text)
        result = cool.api(clean)
    return render_template('pages/results.html')

Results.html

<body>
<div>

{{ result }}
{{ clean }}

</div>        
</body>

2 个答案:

答案 0 :(得分:3)

但这一切都没有任何意义。

你通过一系列推文循环播放。在该循环内,您反复使用值覆盖resultclean变量。因此,在循环结束时,您只需获得最终变量。

当然,所有这些都没有任何区别,因为您甚至不会将这些变量发送到要呈现的模板,因此模板当然是空白的。

您需要在列表中累积值。然后,您需要将列表发送到模板。最后,您需要遍历模板中的列表。

results = []
for tweet in ...:
    clean = re.sub(r"(?:@\S*|#\S*|http(?=.*://)\S*)", "", tweet.text)
    result = cool.api(clean)
    results.append((clean, result))
 return render_template('pages/results.html', results=results)

...

{% for clean, result in results %}
    {{ clean }}
    {{ result }}
 {% endfor %}

答案 1 :(得分:1)

您没有传递任何要渲染的数据。

results = list() 
for tweet in tweepy.Cursor(api.search,q=str(keyword)+
    " -filter:retweets",
    result_type='recent',
    lang="en").items(num_tweets):
        clean = re.sub(r"(?:@\S*|#\S*|http(?=.*://)\S*)", "", tweet.text)
        result = cool.api(clean)
        results.append((result, clean)) 
return render_template('pages/results.html', results=results)

您还需要在Jinja2中实现一个循环

{% for result in results %} 
{{ result[0] }}
{{ result[1] }}
{% endfor %}