在web.py中渲染HTML

13 投票
2 回答
6624 浏览
提问于 2025-04-16 23:06

我正在做一个类似维基百科的项目。我可以使用markdown把文本文件转换成html代码。我的问题是,我想把这些html代码显示在一个html文件里。以下是我的代码:

class articles:
    def GET(self):
        form_name=web.input()
        article_name=form_name.page
        article_file_path=os.path.join('articles',article_name)
        fp = open(article_file_path,'rU')
        text = fp.read()
        body = markdown2.markdown(text)
        return render.article_files(article_name, body)

我把文章名和内容(html代码)传递给article_files.html。内容看起来是这样的:

<h1>Hai</h1>
<p>Welcome<em>Ajay</em></p>

问题是,内容直接显示出来了。也就是说,html代码在屏幕上显示了所有的标签。我想把这个html代码(内容)渲染成这样:

你好
欢迎 Ajay

我的HTML文件是:

$def with(title,content)
<html>
<head>
<title>$title</title>
</head>
<body>
    <form name="form" method="GET">
        $content
    </form>
</body>
</html>

2 个回答

2

你需要告诉浏览器你发送的数据是什么类型的,这个叫做 mime 类型。如果不告诉它,浏览器就不知道该怎么显示这些数据。

你可以通过在你的函数里添加 下面这一行 来做到这一点:

web.header('Content-Type', 'text/html')
13

在web.py的模板中,HTML转义是默认开启的。这意味着如果你在模板中插入一些内容,它会自动处理这些内容,以防止恶意代码的执行。如果你想关闭这个功能,可以在变量名前加一个冒号:

<form name="form" method="GET">
    $:content
</form>

要确保没有办法让可能有恶意意图的用户向你的未转义模板中输入任意的HTML代码。

撰写回答