我在views.py中有这段代码:
from django.http import HttpResponse, Http404
from django.shortcuts import render_to_response
from bs4 import BeautifulSoup
import urllib
def extract_links(request):
starting_link = urllib.urlopen("http://www.finalyearondesk.com")
soup = BeautifulSoup(starting_link)
all_links = soup.findAll('a', href = True)
return render_to_response('extracted_links.html',{'all_links': all_links })
在此,我使用BeautifulSoup。 我正在模板文件中编写此代码:extracted_links.html:
{% for final_links in all_links %}
{{ final_links['href'] }} # {{ final_links.href }} did not print anything
{% endfor %}
但问题是它显示错误:
Could not parse the remainder: '['href']' from 'final_links['href']'
有任何建议如何解决这个问题?如果我在一个简单的python文件上使用这个函数,它可以正常工作,但不能在django模板上
答案 0 :(得分:1)
如果all_links
是dict
列表,每个href
都有密钥href
,请执行以下操作以访问Django模板中{% for final_links in all_links %}
{{ final_links.href }}
{% endfor %}
的值:
{{1}}
答案 1 :(得分:1)
尝试:
{% for final_links in all_links %}
{{ final_links.attrMap.href }}
{% endfor %}
我从下一次会议到达了那个:
>>> import urllib
>>> from BeautifulSoup import BeautifulSoup as BS
>>> start = urllib.urlopen('http://blog.tkbe.org')
>>> soup = BS(start)
>>> all_links = soup.findAll('a', href=True)
>>> first = all_links[0]
>>> first
<a href="http://blog.tkbe.org/" title="TKBE" rel="home">TKBE</a>
>>> dir(first)
[..., 'attrMap', 'attrs', ...]
>>> first.attrs
[(u'href', u'http://blog.tkbe.org/'), (u'title', u'TKBE'), (u'rel', u'home')]
>>> first.attrMap
{u'href': u'http://blog.tkbe.org/', u'rel': u'home', u'title': u'TKBE'}
如果您的BeautifulSoup版本具有其他属性,您可以类似地找到它们。
您可能必须在视图中提取它们,而不是在模板中提取它们,例如:
all_links = [link.attrMap['href'] for link in all_links]
返回语句之前的(或您在BeautifulSoup版本中需要访问的任何属性)。