Как хранить многострочный текст в html textarea из python?

0

У меня есть база данных sql, где каждая строка содержит абзацы текста. Я хочу отображать каждую строку текста в своем собственном html textarea. Я использую python для создания html-страницы. Я пробовал следующее, но тело текстового поля всегда пусто. Кто-нибудь знает, что я могу сделать, чтобы исправить это?

# didn't work
# dict = {'example':results[i]["Teaser"].replace("\"", "\\\"").replace("<", "&lt;").replace(">", "&gt;"), 'arg':results[i]["GImageID"]}
# s = "<br><textarea class=\"\" rows=\"2\" cols=\"20\" id=\"extra{arg}\">maybe1 - {example}</textarea>".format(**dict)

# gives an error on the d even though a tutorial said I should do it this way
# s = "<br><textarea class=\"\" rows=\"2\" cols=\"20\" id=\"extra{arg:d}\">maybe2 - {example:d}</textarea>".format(**dict)

#extra += s

#------------------------------------------------------
teaser = results[i]["Teaser"].replace("\"", "\\\"").replace("<", "&lt;").replace(">", "&gt;")


# didn't work - empty
# extra += "<br><textarea class=\"\" rows=\"2\" cols=\"20\" id=\"extra{arg}\">maybe3 - {example}</textarea>".format(example=teaser, arg=results[i]["GImageID"])

# didn't work - empty
# extra += "<br><textarea class=\"\" rows=\"2\" cols=\"20\" id=\"extra{arg}\">maybe3.5 - {example}</textarea>".format(example=results[i]["GImageTeaser"].replace("\"", "\\\"").replace("<", "&lt;").replace(">", "&gt;"), arg=results[i]["GImageID"])

# didn't work - empty
# t = Template("<br><textarea class=\"\" rows=\"2\" cols=\"20\" id=\"extra$arg\">maybe4 - $example</textarea>")
# s = t.substitute({ 'example': results[i]["Teaser"].replace("\"", "\\\"").replace("<", "&lt;").replace(">", "&gt;"), 'arg': results[i]["GImageID"]})
# extra += s

# didn't work - empty
# html = Template("<br><textarea class=\"\" rows=\"2\" cols=\"20\" id=\"extra$arg\">maybe5 - $example</textarea>")
# result = html.safe_substitute(example=teaser,arg='Vishnu')

# result = html.safe_substitute(example=results[i]["Teaser"].replace("\"", "\\\"").replace("<", "&lt;").replace(">", "&gt;"),arg='Vishnu')
# extra += result

# didn't work - empty
# extra += """<br><textarea class=\"\" rows=\"2\" cols=\"20\" id=\"extra%d\">maybe6 - %s</textarea>""" % (results[i]["GImageID"], results[i]["Teaser"].replace("\"", "\\\"").replace("<", "&lt;").replace(">", "&gt;"))

Текст, приведенный выше, находится в цикле for

for i in range(len(results)):

и я вывел результаты текста [i] ["Тизер"], чтобы убедиться, что он не пуст. GImageID отлично печатает, но текст Teaser, содержащий абзацы, всегда пуст.

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Я застрял часами, и я не могу найти никакого рабочего решения. Благодарю!

  • 0
    Вы пытались написать textarea вручную и посмотреть, работает ли оно? Как я могу «предварительно заполнить» значение текстовой области в форме HTML?
  • 0
    Да, я пошел на w3schools.com, сделал текстовую область и заполнил текст текстом с выводом. <textarea row = "4" cols = "50"> Zsa Zsa Gabor с домашним животным Сьюзи (он же Zsa Zsa Jr.) отправляется из аэропорта Idlewild в Нью-Йорк в Лос-Анджелес, чтобы подготовиться к появлению на телевидении & lt; br / & gt; New Йорк, США - 02 сентября 191955 г. Предоставлено & lt; a href = \ " wenn.com \" & gt; WENN & lt; / a & gt; </ TextArea>
Теги:

1 ответ

0
Лучший ответ
import cgi

text = results[i]["Teaser"] # the text that you want to put into textarea
html_safe_text = cgi.escape(text) # < > & -> &lt; &gt; &amp;
textarea_html = u"<textarea>{}</textarea>".format(html_safe_text)

Вы можете открыть его в браузере для отладки:

import tempfile
import webbrowser
import time

def open_in_browser(html):
    """like lxml.html.open_in_browser() but 'html' is a bytestring."""
    with tempfile.NamedTemporaryFile("wb", 0, suffix='.html') as file:
        file.write(html)
        webbrowser.open(file.name)
        time.sleep(60) # give the browser a minute to open before
                       # deleting the file

open_in_browser((u'''<!doctype html>
    <meta charset="utf-8">
    <title>Fill textarea</title>
''' + textarea_html).encode('utf-8'))

Вот отдельный сценарий fill-textarea.py который вы можете попробовать.

  • 0
    Я изменил одну строку кода textarea_html = u "<textarea> возможно {0} </ textarea>". Format (html_safe_text), так как я использую 2.6, но генерируемые текстовые области по-прежнему пусты. Нет ли просто способа сделать это?
  • 0
    @ user2492566: это означает, что ошибка в другом месте, например, len(results) могут быть нулевыми.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню