我有一个使用烧瓶的网站,我想在我的网站中显示goaccess生成的统计数据。
在我的 route.py 中,我添加了:
@main.route("/report")
def report():
return render_template('report.html')
我已经确保报告.html在模板中。
问题是我收到以下错误:
File "/templates/report.html", line 866, in template
<div class="grid-module {{#className}}{{className}}{{/className}}{{^className}}gray{{/className}}">
File "/lib/python3.6/site-packages/jinja2/environment.py", line 497, in _parse
return Parser(self, source, name, encode_filename(filename)).parse()
File "/lib/python3.6/site-packages/jinja2/parser.py", line 901, in parse
result = nodes.Template(self.subparse(), lineno=1)
File "/lib/python3.6/site-packages/jinja2/parser.py", line 874, in subparse
next(self.stream)
File "/lib/python3.6/site-packages/jinja2/lexer.py", line 359, in __next__
self.current = next(self._iter)
File "/lib/python3.6/site-packages/jinja2/lexer.py", line 562, in wrap
for lineno, token, value in stream:
File "/lib/python3.6/site-packages/jinja2/lexer.py", line 739, in tokeniter
name, filename)
jinja2.exceptions.TemplateSyntaxError: unexpected char '#' at 298804
有人知道如何解决这个问题吗?我不想碰报告.html并想这样使用它。
如果没有解决方案,任何人都可以建议一种从互联网访问报告.html的方法吗?
谢谢。
您要做的是使用 flask 提供静态文件。请参阅如何在 Flask 中提供静态文件
如果您查看文档,render_template
函数"从具有给定上下文的模板文件夹中呈现模板"。您拥有的是一个完整的、独立的 HTML 文件,而不是模板。您可以使用 instad send_from_directory功能。请注意,在生产环境中,您可能不想使用 Flask 提供文件,而是使用 Web 服务器(例如 NGINX)。
示例代码:
from pathlib import Path
import os
...
APP_ROOT = os.path.dirname(os.path.abspath(__file__))
TEMPLATES_DIR = os.path.join(APP_ROOT, 'templates')
@app.route("/report")
def report():
REPORT_FILE = os.path.join(TEMPLATES_DIR, "report.html")
if Path(REPORT_FILE).is_file():
return send_from_directory(REPORT_FILE_PATH, "report.html")
return "No stats."