在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:
使用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
标记引用的图像,但这是一个单独的问题)。
我想在浏览器中查看 Django 模板。这个特定的模板在 render_to_string
中被调用,但没有连接到视图,所以我不能只 runserver
并导航到我的 localhost
的 URL。
我的想法是简单地在 Django shell 中调用 render_to_string
,然后以某种方式将生成的字符串传递给 Web 浏览器,例如 Chrome 以查看它。但是,据我所知 webbrowser
模块只接受 url
参数,不能用于呈现表示 HTML.
知道如何实现吗?
您可以将 html 字符串转换为 url:
使用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
标记引用的图像,但这是一个单独的问题)。