def search():
query = "xxx"
r = requests.get('website?q=' + query)
soup = BeautifulSoup(r.content, 'lxml')
results=[]
for row in soup.findAll('li', attrs = {'class':'res'}):
result = {}
result['urltext'] = row.a.text
result['url'] = row.cite.text
results.append(result)
return render_template('site.html', urll = result['url'], urltext = result['urltext'])
else:
return render_template('start.html')
当这样使用时,我在site.html中得到单个结果,就好像循环正在停止并获得第一个结果并将其传递给site.html。我希望所有发现的结果都能通过。
def search():
query = "xxx"
r = requests.get('website?q=' + query)
soup = BeautifulSoup(r.content, 'lxml')
results=[]
for row in soup.findAll('li', attrs = {'class':'res'}):
result = {}
result['urltext'] = row.a.text
result['url'] = row.cite.text
results.append(result)
print (result['url'])
使用打印可以给我所有结果。 但这是没有意义的,除非我放弃 render_template 想法并使用 result ['url'] 和 result ['urltext'] 打印整个HTML >以某种方式。
答案 0 :(得分:0)
您的问题是return
,它总是立即终止函数,因此将永远不会执行下一个循环。因此,请勿在{{1}}循环内使用return
。
将for
与else
一起使用也是一个错误的想法,因为只有在for
-loo中使用else
时,break
才会执行。 for
的工作方式不像for/else
。
另一个问题是if/else
中的result['url']
和result['urltext']
-它只有最后一个值。您在render_template
中拥有所有值,而在results
和result['url']
中则没有。也许您应该将其发送为
result['urltext']
和内部模板使用
return render_template('site.html', results=results)
{% for row in results %}
<a href="{{ row.url }}">{{ row.ulrtext }}</a>
{% endfor %}