Python 如何使用BeautifulSoup和Flask打印循环中的所有字典值

Python 如何使用BeautifulSoup和Flask打印循环中的所有字典值,python,flask,beautifulsoup,jinja2,Python,Flask,Beautifulsoup,Jinja2,当像这样使用时,我在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 = {

当像这样使用时,我在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)

        return render_template('site.html', urll = result['url'], urltext = result['urltext'])
    else:
        return render_template('start.html')
使用打印可以获得所有结果。
但这是毫无意义的,除非我放弃了呈现模板的想法,并以某种方式打印整个HTML,其中包含结果['url']结果['urltext']

您的问题是
返回
,它总是立即结束函数,所以下一个循环永远不会执行。因此,不要在
中使用
返回
,用于
循环

而将
else
for
一起使用也是错误的想法,因为只有在
for
-loo中使用
break
时才会执行
else
for/else
if/else
不同

另一个问题是
render\u template
中的
result['url']
result['urltext']
——它将只有最后一个值。所有值都在
results
中,而不是
result['url']
result['urltext']
中。也许你应该把它作为

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'])
和内部模板的使用

return render_template('site.html', results=results)

澄清您的问题,尝试打印(结果)以获得帮助?您的代码缩进已损坏,因此很难确定任何内容。@AMC已修复。结果要么是单个url,要么是所有url(在打印结果['url']时),不在
for
-循环中使用
return
return
立即结束函数,这样它就永远不会从
findAll
获取下一个值。
{% 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')