【问题标题】:How to populate a html dropdown dynamically with values from a postgres database?如何使用 postgres 数据库中的值动态填充 html 下拉列表?
【发布时间】:2021-04-28 05:05:53
【问题描述】:

我正在使用 Flask 创建一个网站,并且我正在尝试创建一个下拉菜单,其中填充了我的 postgres 数据库中区域表中的所有区域。目前我已经像这样对下拉列表进行硬编码:

<label for="regions">Choose a region:</label>

<select name="regions" id="regions">
  <option value="murray">Murray</option>
  <option value="darling">Darling</option>
  <option value="coast">Coast</option>
  <option value="central">Central</option>
</select>

但是,我想更改此设置,以便根据包含所有区域的表的 sql 查询填充下拉列表。这可能吗?

所有区域名称的 SQL 查询是:

select region_name from regions

【问题讨论】:

  • 您可以尝试从服务器中的数据库中获取值并将这些值发送到您的前端页面。在您的 html 中,您可以使用 Jinja 循环遍历您的数据并将其分配到选项标签内。
  • 你会怎么做?可以使用 sqlalchemy 来获取值吗?
  • 您可以使用pycopg2 连接到您的postgres 数据库。 https://www.postgresqltutorial.com/postgresql-python/connect/供参考。

标签: html sql database postgresql flask


【解决方案1】:

在后端(flask)中,您可以使用查询从 Postgres 数据库中获取所有值:

# code to connect to db
...
# code to fetch from database
list_of_regions = db.execute("select region_name from regions")

然后将这些值传递给前端页面:

@app.route("/")
def index():
    return render_template("index.html", list_of_regions = list_of_regions)

在前端,您可以使用 Jinja 遍历值并将项目添加到下拉列表中:

<label for="regions">Choose a region:</label>

<select name="regions" id="regions">
  {% for region in list_of_regions %}
    <option value={{region.lower()}}>{{region}}</option>
  {% endfor %}
</select>

只需用上面提供的通用代码替换您的特定于案例的代码,就可以了。我不确定如何连接到 postgres 数据库,因为我主要使用 MySQL,所以我想这个 package 可能会更好地帮助你。

【讨论】:

  • 您好,我收到错误消息:jinja2.exceptions.UndefinedError: 'tuple object' has no attribute 'lower'...您知道代码中的什么错误可能导致此问题吗?跨度>
  • 您可能正试图将.lower() 方法传递给tuple 对象。您能否显示您遇到的错误以及导致它的代码。这将帮助我更好地帮助你。
  • 现在解决了我只需要删除 .lower 方法,因为我不需要它
猜你喜欢
  • 2011-12-22
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 2021-09-12
  • 2020-03-26
  • 2014-08-10
  • 1970-01-01
  • 2020-06-26
相关资源
最近更新 更多