Python 使用Flask和render_模板显示HTML表格

Python 使用Flask和render_模板显示HTML表格,python,html,flask,pymysql,Python,Html,Flask,Pymysql,我想在一个使用谷歌云SQL和谷歌应用引擎的网站上显示一个表。 我使用的是Flask和pymysql。为了显示查询结果,我使用了Flask的render_模板 我已经在这里找到了其他类似的主题(如),但在部署我的应用程序时仍然会出错。这个错误似乎与for循环有关。。错误为“jinja2.exceptions.TemplateSyntaxError:应为标记名” 以下是我收到的完整错误消息: ERROR in app: Exception on /analysis [GET] Traceback (

我想在一个使用谷歌云SQL和谷歌应用引擎的网站上显示一个表。 我使用的是Flask和pymysql。为了显示查询结果,我使用了Flask的render_模板

我已经在这里找到了其他类似的主题(如),但在部署我的应用程序时仍然会出错。这个错误似乎与for循环有关。。错误为“jinja2.exceptions.TemplateSyntaxError:应为标记名”

以下是我收到的完整错误消息:

ERROR in app: Exception on /analysis [GET]
Traceback (most recent call last):    File "/env/lib/python3.7/site-packages/flask/app.py", line 2292, in wsgi_app      response = self.full_dispatch_request()
File "/env/lib/python3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request      rv = self.handle_user_exception(e)
File "/env/lib/python3.7/site-packages/flask/app.py", line 1718, in handle_user_exception      reraise(exc_type, exc_value, tb)
File "/env/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise      raise value
File "/env/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request      rv = self.dispatch_request()
File "/env/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request      return self.view_functions[rule.endpoint](**req.view_args)
File "/srv/main.py", line 61, in analysis      return render_template("analysis.html", result = result)
File "/env/lib/python3.7/site-packages/flask/templating.py", line 134, in render_template      return _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list),    File "/env/lib/python3.7/site-packages/jinja2/environment.py", line 869, in get_or_select_template      return self.get_template(template_name_or_list, parent, globals)
File "/env/lib/python3.7/site-packages/jinja2/environment.py", line 830, in get_template      return self._load_template(name, self.make_globals(globals))
File "/env/lib/python3.7/site-packages/jinja2/environment.py", line 804, in _load_template      template = self.loader.load(self, name, globals)
File "/env/lib/python3.7/site-packages/jinja2/loaders.py", line 125, in load      code = environment.compile(source, name, filename)
File "/env/lib/python3.7/site-packages/jinja2/environment.py", line 591, in compile      self.handle_exception(exc_info, source_hint=source_hint)
File "/env/lib/python3.7/site-packages/jinja2/environment.py", line 780, in handle_exception      reraise(exc_type, exc_value, tb)
File "/env/lib/python3.7/site-packages/jinja2/_compat.py", line 37, in reraise      raise value.with_traceback(tb)
File "/srv/templates/analysis.html", line 23, in template      <p class="p1"><span class="s1"><span class="Apple-tab-span"> </span>{% </span><span class="s2">for</span><span class="s1"> r </span><span class="s2">in</span><span class="s1"> result %}</span></p>
File "/env/lib/python3.7/site-packages/jinja2/environment.py", line 497, in _parse      return Parser(self, source, name, encode_filename(filename)).parse()
File "/env/lib/python3.7/site-packages/jinja2/parser.py", line 901, in parse      result = nodes.Template(self.subparse(), lineno=1)
File "/env/lib/python3.7/site-packages/jinja2/parser.py", line 883, in subparse      rv = self.parse_statement()
File "/env/lib/python3.7/site-packages/jinja2/parser.py", line 125, in parse_statement      self.fail('tag name expected', token.lineno)
File "/env/lib/python3.7/site-packages/jinja2/parser.py", line 59, in fail      raise exc(msg, lineno, self.name, self.filename)  jinja2.exceptions.TemplateSyntaxError: tag name expected
文件analysis.html:

<!doctype html>
<table>
<tr>
  <th>contentID</th>
  <th>timestamp</th> 
  <th>clientID</th>
  <th>content</th>
</tr>
{% for r in result %}
<tr>
  <td>{{ r[0] }}</td>
  <td>{{ r[1] }}</td> 
  <td>{{ r[2] }}</td>
  <td>{{ r[3] }}</td>
</tr>
{% endfor %}
</table>

内容ID
时间戳
客户
内容
{r在结果%中的百分比}
{{r[0]}
{{r[1]}
{{r[2]}
{{r[3]}
{%endfor%}
你有什么建议我可以改变什么使它工作吗?

提前谢谢

根据堆栈跟踪,用于
analysis.html
的文本编辑器不是纯文本编辑器。它以其他格式保存文件,使其无效Jinja2语法

您在编辑器中看到的这一行:

{% for r in result %}
Python将视为(基于堆栈跟踪;为清晰起见添加了一些换行符):

{r在结果%中的百分比}


若要解决此问题,请在纯文本编辑器中打开文件
analysis.html
,并根据需要对其进行编辑。

一种方法是首先创建一个对象,或者使用pandas读取\u csv,然后使用dataframe的To \u html方法

如果您的数据已正确格式化,这将节省大量时间:

import pandas as pd
from flask import Flask, render_template

@app.route("/table-page", methods=['GET'])
def table():

    data_dic = {
        'id': [100, 101, 102],
        'color': ['red', 'blue', 'red']}
    columns = ['id', 'color']
    index = ['a', 'b', 'c']

    df = pd.DataFrame(data_dic, columns=columns, index=index)
    table = df.to_html(index=False)
    
    return render_template(
        "at-leaderboard.html",
        table=table)
现在,您可以将HTML字符串粘贴到模板中,而无需将其作为JSON或需要Jinja模板格式化的dict发送:

<html>
  <body>
    <div>
      {{ table | safe }}
    </div>
  </body>
</html>

{{表|安全}}
{result%%中r的%

对于{{r}}in

{%endfor%}
这是一个非常奇怪的错误。这确实代表了你的HTML模板吗?是的,上面的代码就是我的HTML模板。在所有其他评论/主题/教程中,它的描述与我上面所做的相同,但仍然不起作用。我必须导入或安装其他东西吗?就是这样,非常感谢!我不知道Mac TextEditor会将我在程序中看到的代码更改为其他代码。
import pandas as pd
from flask import Flask, render_template

@app.route("/table-page", methods=['GET'])
def table():

    data_dic = {
        'id': [100, 101, 102],
        'color': ['red', 'blue', 'red']}
    columns = ['id', 'color']
    index = ['a', 'b', 'c']

    df = pd.DataFrame(data_dic, columns=columns, index=index)
    table = df.to_html(index=False)
    
    return render_template(
        "at-leaderboard.html",
        table=table)
<html>
  <body>
    <div>
      {{ table | safe }}
    </div>
  </body>
</html>
{% for r in result %}

<p class="p1">
<span class="s1">
<span class="Apple-tab-span">
</span>
</span><span class="s2">for</span><span class="s1"> {{ r }}</span><span class="s2">in</span><span class="s1">
</span>
</p>

{% endfor %}