Почему 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})
Я проверил dls, это dict содержит только одну метку html
<dl>label contents contains some <dd> labels</dl>
Но после передачи dls в render_to_response результат не верный. Соответствующий код шаблона в файле 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
список питонов, содержащий текст всех соответствующих элементов render_to_response
не знает, что делать со списком, поэтому он просто превращает его в строку. Если вы хотите вставить все элементы в виде HTML, попробуйте объединить их в один фрагмент текста, например так:
dls = "".join (dls)
Обратите внимание, что таким образом вы вставляете живой HTML из какого-либо другого источника на свою страницу, что потенциально небезопасно. (Что произойдет, если один из ддс содержит вредоносный Javascript? Вы доверяете поставщику этого HTML?)
Вы должны использовать экземпляр RequestContext при рендеринге шаблонов в Django.
скажи так
return render_to_response('login.html',{'at':at}, context_instance = RequestContext(request))
для этого вам нужно импортировать следующим образом:
from django.template import RequestContext
Надеюсь, что это работает для вас.:)