0

私は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 テンプレートでは動作しません

4

2 に答える 2

1

If all_links is a list of dicts each having key href then do the following to access the value of href in the Django template:

{% for final_links in all_links %}
    {{ final_links.href }}
{% endfor %}
于 2012-04-12T15:51:32.597 に答える
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]

return ステートメント (または、使用しているバージョンの BeautifulSoup でアクセスする必要がある属性) の前に)。

于 2012-04-12T16:05:51.130 に答える