Jinja 错误 Return 关于 For 循环
Jinja Error Return About For Loop
我一直在尝试使用 Flask 和 Jinja 读取文本文件,但是使用 for 循环,我 运行 遇到了麻烦。我的代码如下:
{% for fileNamesIterator in fileNames
fileNameOpen = open(fileNamesIterator, "r")
fileLines = fileName.readlines() %}
<div id="{{ fileNamesIterator[:len(fileNamesIterator)-4] }}" class="title">Title: {{ fileLines[2] }}</div>
<div class="author">Author: {{ fileLines[1] }}</div>
<div class="date">Date Posted: {{ fileLines[0] }}</div>
<br><br>
<div class="mainText"> {{ fileLines[3] }} <br> {{ fileLines[4] }}
</div>
<hr>
{% fileLines.close()
endfor %}
唯一的问题是它返回错误:
TemplateSyntaxError: Encountered unknown tag 'fileLines'. Jinja was looking for the following tags: 'endfor' or 'else'. The innermost block that needs to be closed is 'for'.
我发现这是导致问题的原因:
fileNameOpen = open(fileNamesIterator, "r")
fileLines = fileName.readlines()
但是我不能在 for
语句之后但在 endfor
语句之前执行其他 python 语句吗?
有什么想法吗?
解决方案: Jinja 不是 Python 和大部分工作需要在模板外完成
Jinja 不是 Python(如果你需要能够在你的模板中写任意 Python 你会用 Mako).相反,您需要在 Python 中完成工作并将结果传递给 Jinja:
data = []
for file_name in file_names:
with open(file_name, 'r') as f:
file_lines = f.readlines()
data.append({
"id": file_name[:len(file_name) - 4],
"title": file_lines[2],
"author": file_lines[1],
"date": file_lines[0],
"content": file_lines[3:5]
})
return render_template("template.html", articles=data)
那么您的模板可以是:
{% for article in articles %}
<div id="{{ article.id }}" class="title">Title: {{ article.title }}</div>
<div class="author">Author: {{ article.author }}</div>
<div class="date">Date Posted: {{ article.date }}</div>
<br><br>
<div class="mainText"> {{ article.content[0] }} <br> {{ article.content[1] }}
</div>
<hr>
{% endfor %}
我一直在尝试使用 Flask 和 Jinja 读取文本文件,但是使用 for 循环,我 运行 遇到了麻烦。我的代码如下:
{% for fileNamesIterator in fileNames
fileNameOpen = open(fileNamesIterator, "r")
fileLines = fileName.readlines() %}
<div id="{{ fileNamesIterator[:len(fileNamesIterator)-4] }}" class="title">Title: {{ fileLines[2] }}</div>
<div class="author">Author: {{ fileLines[1] }}</div>
<div class="date">Date Posted: {{ fileLines[0] }}</div>
<br><br>
<div class="mainText"> {{ fileLines[3] }} <br> {{ fileLines[4] }}
</div>
<hr>
{% fileLines.close()
endfor %}
唯一的问题是它返回错误:
TemplateSyntaxError: Encountered unknown tag 'fileLines'. Jinja was looking for the following tags: 'endfor' or 'else'. The innermost block that needs to be closed is 'for'.
我发现这是导致问题的原因:
fileNameOpen = open(fileNamesIterator, "r")
fileLines = fileName.readlines()
但是我不能在 for
语句之后但在 endfor
语句之前执行其他 python 语句吗?
有什么想法吗?
解决方案: Jinja 不是 Python 和大部分工作需要在模板外完成
Jinja 不是 Python(如果你需要能够在你的模板中写任意 Python 你会用 Mako).相反,您需要在 Python 中完成工作并将结果传递给 Jinja:
data = []
for file_name in file_names:
with open(file_name, 'r') as f:
file_lines = f.readlines()
data.append({
"id": file_name[:len(file_name) - 4],
"title": file_lines[2],
"author": file_lines[1],
"date": file_lines[0],
"content": file_lines[3:5]
})
return render_template("template.html", articles=data)
那么您的模板可以是:
{% for article in articles %}
<div id="{{ article.id }}" class="title">Title: {{ article.title }}</div>
<div class="author">Author: {{ article.author }}</div>
<div class="date">Date Posted: {{ article.date }}</div>
<br><br>
<div class="mainText"> {{ article.content[0] }} <br> {{ article.content[1] }}
</div>
<hr>
{% endfor %}