我想将一个列表传递给Jinja,它可以迭代并填充select字段的值。我正在努力构建正确的列表,用于正确填充选择字段。
我拥有的数据是我从文本文件中读取的字符串列表。文本文件中的数据采用以下格式。
['Afghanistan', 'Albania', 'Algeria']
我想在jinja模板中迭代这些元素并填充下拉列表。我的jinja模板看起来像这样
<select name="country">
{% for country in countryList %}
<option value="">{{country}}</option>
{% endfor %}
</select>
我尝试过这样的东西来读取文件
with open(filename, 'r') as f:
data_list = f.read().replace('\n', ' ')
country_list = zip(data_list )
return render_template('signup.html', countryList= country_list)
但是在jinja中,一次只读一个字符。 我试过这个
lines = tuple(open(filename, 'r'))
但这并没有解决问题。在选择字段中,我只看到&#39; [&#39;
我尝试过的其他事情
with open(filename, 'r') as f:
array = []
for line in f:
array.append(line)
with open(filename, 'r') as f:
data_list = []
data_list = f.read().replace('\n', ' ')
据我所知,这不是Jinja或烧瓶问题。但不确定如何从文本文件中正确读取数据,以便它是一个列表。有什么我可以尝试可能表明文本文件的问题?
答案 0 :(得分:0)
data_list
是string
所以迭代器遍历每个字符。要获取列表,您可以运行eval(data_list)
,尽管这可能不安全。您应该以不同的方式构造文本文件,并在值之间使用某些分隔符,然后您可以将data_list
设置为f.read().split('\n')
,例如,如果每个值都由换行符断开,即:
Afghanistan
Albania
Algeria
答案 1 :(得分:0)
将输入文件的格式更改为:
Afghanistan
Albania
Algeria
然后您的代码变为:
with open(filename, 'r') as f:
country_list = [line.strip() for line in f]
return render_template('signup.html', countryList= country_list)
然后您的模板文件无需更改即可使用。