2012-05-04 5 views
1

Ceci est un extrait de mon code.Pourquoi le render_to_response ne fonctionne pas correctement

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}) 

J'ai vérifié le DLS, il est un dict ne contient qu'une seule étiquette html

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

Mais après DLS passe à render_to_response le résultat est incorrect. Le code de modèle correspondant dans result.html est:

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

Le résultat sortie html contient un format de dictionnaire python comme ceci:

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

Cela apparaît dans le code HTML de sortie. C'est très étrange. Est-ce un bug de renfer_to_response?

Répondre

2

Eh bien, dls est une liste python contenant le texte de tous les éléments correspondants. render_to_response ne sait pas quoi faire avec une liste, donc il suffit de le transformer en une chaîne. Si vous souhaitez insérer tous les éléments HTML, essayez de les joindre en un seul morceau de texte comme ceci:

DLS = « » .join (DLS)

Notez que, ce faisant, vous collez en direct HTML d'une autre source dans votre propre page, ce qui est potentiellement dangereux. (Que se passe-t-il si l'un des dds contient du JavaScript malveillant?) Avez-vous confiance au fournisseur de ce code HTML?

+0

+1 pour mentionner l'aspect de sécurité – heinrich5991

1

Vous devez utiliser une instance RequestContext lors du rendu de modèles dans Django.

disent que ce

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

pour cela utiliser, vous devez importer comme suit:

from django.template import RequestContext 

espère que cela fonctionne pour vous. :)

+0

Au lieu d'utiliser render_to_response avec un RequestContext, vous devez importer [render] (https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#django. shortcuts.render) à partir de django.shortcuts et utiliser 'return render (request, 'result.html', {'search_key': clé de recherche, 'pages de tour ': tps, 'bookmarks': dls})'. Le rendu est rendu à la réponse mais avec un RequestContext. – olofom

Questions connexes