Flask上下文变量在模板中不可用

Flask上下文变量在模板中不可用,flask,jinja2,python-3.6,Flask,Jinja2,Python 3.6,刚接触Flask并尝试编写教程,但在使用render\u template()方法中的上下文变量时遇到了一些问题 下面是app.py的 from flask import Flask, render_template, url_for app = Flask(__name__) posts = [ { 'author': 'Some Author', 'title': 'Blog Post 1', 'content': 'First bl

刚接触Flask并尝试编写教程,但在使用
render\u template()
方法中的上下文变量时遇到了一些问题

下面是app.py的

from flask import Flask, render_template, url_for
app = Flask(__name__)

posts = [
    {
        'author': 'Some Author',
        'title': 'Blog Post 1',
        'content': 'First blog post',
        'date_posted': 'April 21, 2018'
    },
    {
        'author': 'Another Author',
        'title': 'Blog Post 2',
        'content': 'Second blog post',
        'date_posted': 'May 21, 2013'
    }
]


@app.route("/")
@app.route("/home")
def home():
    return render_template('home.html', posts=posts)


@app.route("/about")
def about():
    return render_template('about.html')


if __name__ == '__main__':
    app.run(debug=True)
这是我的
home.html
模板:

<!DOCTYPE html>
<html>
<head>
    <title>Home</title>
</head>
<body>
    { % for post in posts % }
        <h4>{{ post.title }}</h4>
        <p>By {{ post.author }} on {{ post.date_posted }}</p>
        <p>{{ post.content }}</p>
    { % endfor % }
</body>
</html>
以下是终端的回溯:

File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/bigdaddy/Sites/Flask_Blog/app.py", line 25, in home
    return render_template('home.html', some_list=posts)
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/templating.py", line 135, in render_template
    context, ctx.app)
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/flask/templating.py", line 117, in _render
    rv = template.render(context)
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/jinja2/asyncsupport.py", line 76, in render
    return original_render(self, *args, **kwargs)
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/jinja2/environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/jinja2/_compat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "/home/bigdaddy/Sites/Flask_Blog/templates/home.html", line 8, in top-level template code
    <h4>{{ post.title }}</h4>
  File "/home/bigdaddy/Sites/Flask_Blog/lib/python3.6/site-packages/jinja2/environment.py", line 430, in getattr
    return getattr(obj, attribute)
jinja2.exceptions.UndefinedError: 'post' is undefined
文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/Flask/app.py”,第2309行,in_ucall__
返回self.wsgi_应用程序(环境,启动响应)
wsgi_应用程序中的文件“/home/bigdad/Sites/Flask_Blog/lib/python3.6/site packages/Flask/app.py”,第2295行
response=self.handle\u异常(e)
文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/Flask/app.py”,第1741行,在handle_异常中
重放(exc_类型、exc_值、tb)
文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/Flask/_compat.py”,第35行,在reraise中
增值
wsgi_应用程序中的文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/Flask/app.py”,第2292行
response=self.full\u dispatch\u request()
文件“/home/bigdady/Sites/Flask\u Blog/lib/python3.6/site packages/Flask/app.py”,第1815行,完整发送请求
rv=自身处理用户异常(e)
文件“/home/bigdad/Sites/Flask\u Blog/lib/python3.6/site packages/Flask/app.py”,第1718行,在handle\u user\u异常中
重放(exc_类型、exc_值、tb)
文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/Flask/_compat.py”,第35行,在reraise中
增值
文件“/home/bigdad/Sites/Flask\u Blog/lib/python3.6/site packages/Flask/app.py”,第1813行,完整发送请求
rv=自我分派请求()
文件“/home/bigdad/Sites/Flask_Blog/lib/python3.6/site packages/Flask/app.py”,第1799行,在调度请求中
返回self.view_函数[rule.endpoint](**req.view_参数)
文件“/home/bigdady/Sites/Flask_Blog/app.py”,第25行,在home中
返回render_模板('home.html',some_list=posts)
文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/Flask/templating.py”,第135行,在render_模板中
上下文(ctx.app)
文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/Flask/templating.py”,第117行,在渲染中
rv=template.render(上下文)
文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/jinja2/asyncsupport.py”,第76行,在渲染中
返回原始渲染(self、*args、**kwargs)
文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/jinja2/environment.py”,第1008行,在渲染中
返回self.environment.handle\u异常(exc\u info,True)
文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/jinja2/environment.py”,第780行,在handle_异常中
重放(exc_类型、exc_值、tb)
文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/jinja2/_compat.py”,第37行,在reraise中
通过_回溯(tb)提升值
顶级模板代码中的文件“/home/bigdady/Sites/Flask_Blog/templates/home.html”,第8行
{{post.title}}
文件“/home/bigdady/Sites/Flask_Blog/lib/python3.6/site packages/jinja2/environment.py”,第430行,在getattr中
返回getattr(对象,属性)
jinja2.exceptions.UndefinedError:“post”未定义
任何帮助都将不胜感激。 在Xubuntu Linux 16.04上的virtualenv中使用python3.6,如果有帮助的话。
谢谢

Jinja没有检测到你的for循环,因为你在
{
%
之间放了一个空格,Jinja正在寻找特定的对
{%
。现在Jinja完全忽略了
{%for post in posts%}
行,将其视为HTML的一部分,它不需要做任何事情,然后转到下一行,在那里它无法找到
post

以下内容修复了循环的开始和结束:

<body>
    {% for post in posts %}
        <h4>{{ post.title }}</h4>
        <p>By {{ post.author }} on {{ post.date_posted }}</p>
        <p>{{ post.content }}</p>
    {% endfor %}
</body>

{posts%%中的post为%s}
{{post.title}}
作者{{post.author}}于{post.date_posted}}

{{post.content}}

{%endfor%}
Jinja没有检测到你的for循环,因为你在
{
%
之间放了一个空格,Jinja正在寻找特定的对
{%
。现在Jinja完全忽略了
{%for post in posts%}
行,将其视为HTML的一部分,它不需要做任何事情,然后转到下一行,在那里它无法找到
post

以下内容修复了循环的开始和结束:

<body>
    {% for post in posts %}
        <h4>{{ post.title }}</h4>
        <p>By {{ post.author }} on {{ post.date_posted }}</p>
        <p>{{ post.content }}</p>
    {% endfor %}
</body>

{posts%%中的post为%s}
{{post.title}}
作者{{post.author}}于{post.date_posted}}

{{post.content}}

{%endfor%}
感谢您的回复。按照您的建议实施上述操作的意义是,我不再收到这些错误,但现在在浏览器中,我只有一个空白页。没有呈现任何数据。对此有什么想法吗?鉴于这解决了错误消息,最好接受答案并问另一个问题,以保留此内容这对以后关注这个问题的其他人来说是很清楚的。在我的脑海中,我会查看flask日志,看看它从何处调用哪个模板。空白页面通常意味着没有内容。尝试在页面上放置一些独立于posts变量的文本,看看是否加载。实际上,
{
和“%”不要紧,@J2112O您的代码是有效的,我已经用Python 2.7在我的计算机上测试过了。Python 3.6也对我有效。@Frank AK。这是一种奇怪的行为,可能是我的设置/环境中的某些东西。因为,有了这些空格,我的应用程序不起作用,只会产生我最初在问题中发布的错误。但删除它们确实有效很好。感谢您的回复。按照您的建议实施上述操作,我不再收到这些错误,但现在在浏览器中,我只有一个空白页。没有数据被呈现。对此有什么想法吗?鉴于这解决了错误消息,最好接受答案并问另一个问题以保持精简gs c