在Python中,如何在浏览器中打开一个代表HTML的字符串?

In Python, how to open a string representing HTML in the browser?

我想在浏览器中查看 Django 模板。这个特定的模板在 render_to_string 中被调用,但没有连接到视图,所以我不能只 runserver 并导航到我的 localhost 的 URL。

我的想法是简单地在 Django shell 中调用 render_to_string,然后以某种方式将生成的字符串传递给 Web 浏览器,例如 Chrome 以查看它。但是,据我所知 webbrowser 模块只接受 url 参数,不能用于呈现表示 HTML.

的字符串

知道如何实现吗?

您可以将 html 字符串转换为 url:

https://docs.python.org/2/howto/urllib2.html

使用Data URL:

import base64

html = "..."

url = "text/html;base64," + base64.b64encode(html)
webbrowser.open(url)

Launch HTML code in browser (that is generated by BeautifulSoup) straight from Python 之后,我编写了一个测试用例,其中我将 HTML 写入临时文件并使用 file:// 前缀将其转换为 url webbrowser.open() 接受:

import tempfile
import webbrowser
from django.test import SimpleTestCase
from django.template.loader import render_to_string


class ViewEmailTemplate(SimpleTestCase):
    def test_view_email_template(self):
        html = render_to_string('ebay/activate_to_family.html')
        fh, path = tempfile.mkstemp(suffix='.html')
        url = 'file://' + path

        with open(path, 'w') as fp:
            fp.write(html)
        webbrowser.open(url)

(不幸的是,我发现该页面不包含 Django 的 static 标记引用的图像,但这是一个单独的问题)。