2016-11-25 291 views
1

这里是views.py。我想显示'www.pythonforbeginners.com'中包含的所有链接,但问题是它只显示页面的最后一个链接。我该如何解决它?显示网页上的所有链接

from django.shortcuts import render 
from bs4 import BeautifulSoup 
import urllib2 

def home(request): 
    url = urllib2.urlopen("http://www.pythonforbeginners.com") 
    readurl = url.read() 
    soup = BeautifulSoup(readurl) 
    links = soup.find_all('a') 
    for lin in links: 
     result = lin.get('href') 

    return render(request, 'search/homepage.html', {'result': result, 'url':url}) 

这里是homepage.html

{{ result }} 

And output I got:

+0

你正在做一个迭代,所以'links'集合的最后一个元素(隐私策略)被分配给'result'变量。最好将该集合或其清理过的表单传递给您的模板文件。 – marmeladze

回答

4

试试这个。

def test(request): 
    url = urllib2.urlopen("http://www.pythonforbeginners.com") 
    readurl = url.read() 
    soup = BeautifulSoup(readurl) 
    links = soup.find_all('a') 
    result = [] 
    for lin in links: 
     result.append(lin.get('href')) 

    return render(request, 'portal_test.html', {'result': result, 'url': url}) 

你正在做的是重写结果数据。您必须使用列表并获取其中的所有数据。然后在模板中使用,

{% for x in result %} 
{{ x }} 
{% endfor %} 

使用正确的变量名... :)

1

你的结果只包含最后link.Append它在循环列表,然后发送列表中的模板。

现在你的结果只有最后一个链接。

from django.shortcuts import render 
from bs4 import BeautifulSoup 
import urllib2 

def home(request): 
    url = urllib2.urlopen("http://www.pythonforbeginners.com") 
    readurl = url.read() 
    soup = BeautifulSoup(readurl) 
    links = soup.find_all('a') 
    list1 = [] 
    for lin in links: 
     result = lin.get('href') 
     list1.append(result) 

    return render(request, 'search/homepage.html', {'result': list1,'url':url}) 

这将工作.. 你的列表(列表1)将是这个样子。 ['www.google.com','www.new.com','....','....']

在模板中,您可以遍历结果变量来打印每个链接。 (.html文件)

{% for x in result %} 
{{ x }} 
{% endfor %} 
相关问题