2012-05-04 15 views
1

これは私のコードのスニペットです。私はDLSを確認render_to_responseが正しく動作しない理由

soup=BeautifulSoup(html_document) 
tabulka=soup.find("table",width="100%") 
dls=tabulka.findAll("dl",{"class":"resultClassify"}) 
tps=tabulka.findAll("div",{"class":"pageT clearfix"}) 
return render_to_response('result.html',{'search_key':search_key,'turnpages 
':tps,'bookmarks':dls}) 

、それはdictのは、結果が正しくないrender_to_responseするだけ1つのHTMLラベル

<dl>label contents contains some <dd> labels</dl> 

しかし、パスDLS後が含まれています。 result.htmlで対応するテンプレートコードは次のとおりです。

{% if bookmarks %} 
{% for bookmark in bookmarks %} 
{{bookmark|safe}} 
{% endfor %} 
{% else %} 
<p>No bookmarks found.</p> 
{% endif %} 

出力結果のHTMLは、このようなPythonの辞書フォーマットが含まれています

[<dd>some html</dd>,<dd>some html</dd>,<dd>some html</dd>,...] 

これは、出力HTMLで表示されます。それは非常に奇妙です。これはrenfer_to_responseのバグですか?

答えて

2

まあ、dlsは、すべての一致する要素のテキストを含むpythonリストです。 render_to_responseはリストをどうするかわからないので、単に文字列に変換します。

のDLS =「」.join(DLS)そうすることによって、あなたはライブHTML貼り付けされていることを

注:HTMLなど、すべての要素を挿入したい場合は、そのようなテキストの単一部分にそれらに参加してみてください他のソースから自分のページに移動することがありますが、これは潜在的に危険です。 (ddsの1つに悪意のあるJavascriptが含まれているとどうなりますか?そのHTMLのプロバイダを信頼しますか?)

+0

セキュリティアスペクトに言及すると+1 – heinrich5991

1

Djangoでテンプレートをレンダリングするときには、RequestContextインスタンスを使用する必要があります。これは使用するため

は、次のようにインポートする必要があり、この

return render_to_response('login.html',{'at':at}, context_instance = RequestContext(request)) 

のように言う:

from django.template import RequestContext 

ホープこれはあなたのために働きます。 :)

+0

RequestContextでrender_to_responseを使用する代わりに、[render](https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#django)をインポートする必要があります。ショートカット。レンダー)をdjango.shortcutsから取得し、 'return render(request、 'result.html'、{'search_key':search_key、 'turnpages ':tps、 'bookmarks':dls})'を使用します。レンダリングはrender_to_responseですが、RequestContextを使用します。 – olofom

関連する問題