jinja2.exceptions.TemplateSyntaxError:预期标记“打印语句结束”,得到“发布”

新手上路,请多包涵

我是编程新手,最近我的一个朋友给了我一个项目来让我熟悉编程环境和语言(在这个特定的例子中是 python)。 https://www.youtube.com/watch?v=QnDWIZuWYW0 我将此视频用作初学者教程,以帮助我了解我应该如何继续我的个人项目。我写的代码正是视频中的写法,我得到了一个错误。

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

posts = [
    {
        'author': 'Alon Salzmann',
        'title': 'First Post',
        'content': 'First post content',
        'date posted': 'September 5, 2018'
    },
    {
        'author': 'Alon Salzmann',
        'title': 'Second Post',
        'content': 'Second post content',
        'date posted': 'September 6, 2018'
    }
]

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

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

if __name__ == '__main__':
    app.run(debug=True)

上面的代码是我写的python代码,下面的代码是我写的涉及python的html代码:

 <!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    {% for post in posts %}
    <h1>{{ post.title }}</h1>
    <p>By {{ post.author }} on {{ post.date posted }}</p>
    <p>{{ post.content }}</p>
    {% endfor %}
</body>
</html>

在 cmd 和 powershell 上运行程序(当然不是同时),并转到我的本地主机地址后,我得到了标题中出现的错误:

 jinja2.exceptions.TemplateSyntaxError: expected token 'end of print statement', got 'posted'

我很想得到一个很好的解释,说明为什么会发生这种情况,以及如何解决这个问题。请记住我是初学者,可能首先需要解释一些基本概念 :)。

PS 视频中那个人的代码有效,所以我很想知道我哪里出错了。

原文由 alon salzmann 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

该行 <p>By {{ post.author }} on {{ post.date posted }}</p> 是这里的问题

将其替换为 <p>By {{ post.author }} on {{ post.date_posted }}</p>

post.date_posted 是一个变量,应该和你模型中的那个一样,它们之间的空格显然是语法错误(拼写错误)

原文由 Vineeth Sai 发布,翻译遵循 CC BY-SA 4.0 许可协议

也发生在我身上,在其他情况下你得到同样的错误但你的语法是正确的,我替换:

{{ mycode }}

在它不打印但做某事的地方:

{% mycode %}

这是工作。

{{ }} 用于打印

{% %} 用于执行指令(for, if, …)

原文由 Yaham 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题