Flask render_template() 不呈现 xhtml,但当我手动打开它时它在我的浏览器中正确呈现
Flask render_template() does not render the xhtml, but it renders correctly in my browser when I open it manually
我正在尝试渲染 xhtml (X3D) 文件。问题是,当通过 flask 路由呈现这些模板时,一个 xhtml 模板可以正常工作,而另一个则不能。当我在浏览器中手动打开这两个文件时,它们都可以正常工作。第二个文件是使用 BeautifulSoup.
对第一个文件的修改
#flask app module
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def hello_world():
return render_template('index.html')
@app.route('/xhtml')
def xhtml():
return render_template('8b0e87efd5144053916a1cadfc9c5194.xhtml')
@app.route('/xhtml_2')
def xhtml_2():
return render_template('920e053d8e474fc1869e9a2c763e9186.xhtml')
if __name__ == '__main__':
app.run(debug=True)
关于 render_template() 我是否遗漏了什么?
工作文件:https://pastebin.com/qQi96Fcq
无效文件:https://pastebin.com/HJiD9WTZ
关于 render_template() 我是否遗漏了什么?
Flask uses the Jinja template library to render templates.
难道 一个 xhtml 模板可以正常工作 巧合是有效的 Jinja
模板吗?
jinja
默认情况下期望 .html
作为模板的扩展名,但对于您的情况,您想要使用其他扩展名 .xhtml
呈现模板,为此您需要 autoescape 该自定义扩展,您必须像这样在您的 Flask
应用程序中全局启用它
from jinja2 import select_autoescape
app.jinja_env.autoescape = select_autoescape(
default_for_string=True,
enabled_extensions=('html', 'xhtml')
)
参考https://jinja.palletsprojects.com/en/3.0.x/api/
如果有用请告诉我。
两个文件非常相似,因为第二个文件只是使用 BeatifulSoup 对第一个文件的修改。我玩弄了这些文件并逐步更改了代码块。我想通了,BeautifulSoup 改变了
<Viewpoint ... ></Viewpoint>
到
<Viewpoint ... />
jinja 似乎并不喜欢它。在损坏的文件中更改这些标签后,它现在可以正确呈现:
<Viewpoint ... > </Viewpoint>
尽管没有人能为我解决这个问题,但我仍然感谢您的意见,因为它让我更专注地思考我的问题。
将“内容类型”从“text/html”更改为“application/xhtml+xml”。 HTML 不接受自闭标签。然而,XHTML 确实如此。
"但是,即使文档正确验证为 XHTML,真正决定 XHTML/HTML 在浏览器中处理的是 MIME 类型,如前所述,MIME 类型通常设置不正确。所以有效 XHTML 被视为无效 HTML。"
来源:https://flask.palletsprojects.com/en/2.0.x/htmlfaq/
更改的代码部分:
from flask import Flask, render_template, make_response
@app.route('/xhtml_2')
def xhtml_2():
resp = make_response(render_template('920e053d8e474fc1869e9a2c763e9186.xhtml'), 200)
resp.headers['Content-Type'] = 'application/xhtml+xml'
return resp
我正在尝试渲染 xhtml (X3D) 文件。问题是,当通过 flask 路由呈现这些模板时,一个 xhtml 模板可以正常工作,而另一个则不能。当我在浏览器中手动打开这两个文件时,它们都可以正常工作。第二个文件是使用 BeautifulSoup.
对第一个文件的修改#flask app module
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def hello_world():
return render_template('index.html')
@app.route('/xhtml')
def xhtml():
return render_template('8b0e87efd5144053916a1cadfc9c5194.xhtml')
@app.route('/xhtml_2')
def xhtml_2():
return render_template('920e053d8e474fc1869e9a2c763e9186.xhtml')
if __name__ == '__main__':
app.run(debug=True)
关于 render_template() 我是否遗漏了什么?
工作文件:https://pastebin.com/qQi96Fcq
无效文件:https://pastebin.com/HJiD9WTZ
关于 render_template() 我是否遗漏了什么?
Flask uses the Jinja template library to render templates.
难道 一个 xhtml 模板可以正常工作 巧合是有效的 Jinja
模板吗?
jinja
默认情况下期望 .html
作为模板的扩展名,但对于您的情况,您想要使用其他扩展名 .xhtml
呈现模板,为此您需要 autoescape 该自定义扩展,您必须像这样在您的 Flask
应用程序中全局启用它
from jinja2 import select_autoescape
app.jinja_env.autoescape = select_autoescape(
default_for_string=True,
enabled_extensions=('html', 'xhtml')
)
参考https://jinja.palletsprojects.com/en/3.0.x/api/
如果有用请告诉我。
两个文件非常相似,因为第二个文件只是使用 BeatifulSoup 对第一个文件的修改。我玩弄了这些文件并逐步更改了代码块。我想通了,BeautifulSoup 改变了
<Viewpoint ... ></Viewpoint>
到
<Viewpoint ... />
jinja 似乎并不喜欢它。在损坏的文件中更改这些标签后,它现在可以正确呈现:
<Viewpoint ... > </Viewpoint>
尽管没有人能为我解决这个问题,但我仍然感谢您的意见,因为它让我更专注地思考我的问题。
将“内容类型”从“text/html”更改为“application/xhtml+xml”。 HTML 不接受自闭标签。然而,XHTML 确实如此。
"但是,即使文档正确验证为 XHTML,真正决定 XHTML/HTML 在浏览器中处理的是 MIME 类型,如前所述,MIME 类型通常设置不正确。所以有效 XHTML 被视为无效 HTML。"
来源:https://flask.palletsprojects.com/en/2.0.x/htmlfaq/
更改的代码部分:
from flask import Flask, render_template, make_response
@app.route('/xhtml_2')
def xhtml_2():
resp = make_response(render_template('920e053d8e474fc1869e9a2c763e9186.xhtml'), 200)
resp.headers['Content-Type'] = 'application/xhtml+xml'
return resp