【发布时间】:2023-03-05 17:53:01
【问题描述】:
我有一个国家对象列表,其中包含名称、大陆、人口、缩写等属性,我只是试图将该对象传递给 html 模板。我有其他路线都编码相同,工作正常,但由于某种原因,国家对象作为字符串传递,列表似乎是空的。
@app.route('/continents/<continent>/<country>')
def countryView(country, continent):
countries = []
for c in countriesWorld:
if c.continent == continent:
countries.append(c)
if c.name == country:
country = c
return render_template('countryview.html', country=country,
countries=countries), 200
这是我的 html/jinja 模板
{% extends "base.html" %}
{% block content %}
<div id="countrycontainer">
<h1>{{ country.name }}</h1>
<img src="{{ "../static/img/flags/" ~ country.abbreviation ~ ".png"
}}">
</div>
{% endblock %}}
如果我使用 '{{ country }} 而不是国家/地区名称,则会显示该名称,因此很明显它已作为字符串而不是对象传递,我无法弄清楚原因。任何帮助将不胜感激
【问题讨论】:
-
很难准确地说出问题是什么,但您有两件事需要密切关注:1.
countriesWorld可能为空,这意味着country的值永远不会改变了。或者2.if c.name == country永远不会变成True,这也意味着country的值永远不会改变。尝试打印c.name和country以确保它们确实匹配。 -
感谢您的回复。 countryWorld 是一个国家对象列表,可以毫无问题地传递给其他路线,并且永远不会改变。它会在 app.py 加载时从 csv 文件中提取信息,所以我不明白为什么它会是空的,最重要的是,如果我在模板中只使用 {{county}} 而不是 {{ country.name}},然后会显示国家名称。
-
显示国家名称是因为它已经被定义了。你看,函数
countryView有一个名为country的参数。正是该国家/地区被传递给您的模板。因此,再次检查以确保c.name == country的计算结果为True。 -
因此,在 csv 文件中,国家/地区名称的结尾有一个空格字符,这就是 c.name==country 评估为假的原因。非常感谢您的帮助,它现在可以正常工作了!