用一个循环在一个列表中显示两个列表的结果(Flask - Python)

Display results from two lists in one list with one loop (Flask - Python)

我试图在链接列表的 HTML 页面 (index.html) 上显示我的结果。我有两个列表,第一个包含所有网站名称,第二个包含它们的链接。我想将名称显示为可点击的项目。

我的清单:

name_list = ['Name1','Name2','Name3']
link_list = ['Link1','Link2','Link3']

我的 Python 密码是什么 returns:

return render_template('index.html' , name_list =name_list , link_list =link_list , len1 = len(name_list ))

HTML代码:

{% for i in range(0, len1) %}
      <li><a href={{link_list[i]}} >{{ name_list[i] }}</a></li> 
{% endfor %}

但是我有两个错误:

首先使用 len1 ,因为当我将代码更改为 range(0, 5) (或任何 int)时,这一行有效。

TypeError: 'Undefined' object cannot be interpreted as an integer

第二次发生在我添加我想要的元素的位置时 name_list[i]

jinja2.exceptions.UndefinedError: 'name_list' is undefined

这里有一个简单的方法可以解决您的问题:

您将两个列表与 python 的内置函数 zip():

合并
name_list = ['Name1','Name2','Name3']
link_list = ['Link1','Link2','Link3']
name_link_list = zip(name_list, link_list)

你只需return这个:

return render_template('index.html' , name_link_list=name_link_list)

此 return 是一个 [('Name1', 'Link1'), ('Name2', 'Link2'), ...] 形式的元组列表,您可以使用每个元素的索引在 HTML 代码中获取它。 0 代表 name,1 代表 link.

最后是您的 HTML 代码:

<ul>
    {% for i in name_link_list %}
        <li><a href={{i[1]}} >{{ i[0] }}</a></li> 
    {% endfor %}
</ul>