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 中得到单个结果,就像循环停止并获得第一个结果并将其传递给站点.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的想法并以某种方式打印带有结果['url']和result['urltext']的整个HTML。
你的问题是return
它总是立即结束函数,所以下一个循环永远不会被执行。所以不要在 -loop 中使用for
return
。
将else
与for
一起使用也是错误的想法,因为只有当您在for
-loo 中使用break
时else
才会执行。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 %}
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)
if results:
return render_template('site.html', results=results)
else:
return render_template('start.html')