如何在文本变量中输出自动生成HTML并返回它?

时间:2017-08-01 21:06:15

标签: python html

我已经构建了一个基本打印我需要的html的函数,以便发送带有报告和数据信息的格式化电子邮件。

def create_html_security_ldw(df1, df2):

    date_time = time.strftime('%b %d %Y')

    print('<html><body>')
    print('<img src=\"xyz.png\" style=\"display: block; margin: 40px auto; width: 200px; height: auto;\">')
    print('<h1 style=\"text-align: center;\">Security Risk LDW - ' + date_time + '</h1>')
    print('<h2 style=\"text-align: center;\">Top Unsettled by Security</h2>')
    print('<div style=\"position: relative; margin: auto; width: 60%;\"><table id=\"t01\"><tr><th>Security</th><th>Ticker</th><th>Yesterday</th><th>Currency</th></tr>')

    for index, row in df1.iterrows():
        print('<tr><td><b>' + row['Security'] + '</b></td>')
        print('<td>' + row['Ticker'] + '</td>')
        print('<td>' + str(row['*Yesterday*']) + '</td>')
        print('<td>' + row['Currency'] + '</td></tr>')

    print('</table><br><br>')

    print('<h2 style=\"text-align: center;\">Top Unsettled by Currency</h2>')
    print('<div style=\"position: relative; margin: auto; width: 60%;\"><table id=\"t01\"><tr><th>Currency</th><th>Yesterday</th><th>Percentage</th></tr>')


    for index, row in df2.iterrows():
        print('<tr><td><b>' + row['Currency'] + '</b></td>')
        print('<td>' + str(row['*Yesterday*']) + '</td>')
        print('<td>' + str(row['Percentage']) + '</td></tr>')

    print('</table>')
    print('</div><br><br><br></body></html>')

有没有可能的方法我可以把它存储在一个变量中,然后返回一个不同的函数我打电话说:

send_outlook_email(create_html_security_ldw(big_security, sums_sort))

如果我将其复制并粘贴到.html文件中,则输出的数据完全正确。但我希望它能够自我生成。我尝试以这种方式运行它,但显然它不会起作用,因为我没有返回任何东西。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

Python中有各种各样的字符串处理工具,所以是的,你绝对可以做到这一点。

显而易见,但可能是单调乏味的方式,只需用连接替换所有打印语句:

s = '<html><body>'
s += '<img src=\"xyz.png\" style=\"display: block; margin: 40px auto; width: 200px; height: auto;\">\n'

for index in ["Hello", "there", "buddy"]:
    s += '<tr><td><b>' + index + '</b></td>\n'

return s

除此之外,Python还具有各种模板和格式可能性,可以将变量传递给要编码的字符串。一个例子:

from string import Template

t = Template("<tr><td><b>$word</b></td>\n")
for index in ["Hello", "there", "buddy"]:
    s += t.substitute(word=index)

print(s)

更多信息:https://docs.python.org/2.4/lib/node109.html

除此之外,还有用于模板化HTML的完整软件包,例如Jinja(http://jinja.pocoo.org

以及更多内容:https://wiki.python.org/moin/Templating

答案 1 :(得分:0)

是的,您可以创建一个变量,如:

html = """<html>
<body> {{var1}}
</body>
</html>"""

这将是您的模板,您可以使用以下命令将变量传递给此模板:

new_html = html.format( var1="hello")

因此,您可以在模板中传递任何类型的变量。