【问题标题】:Use Jinja to dynamically generate form inputs and labels from python list使用 Jinja 从 python 列表中动态生成表单输入和标签
【发布时间】:2018-03-22 13:27:57
【问题描述】:

如何使用Jinja2从列表中动态生成表单输入和标签?例如,假设我有列表:

A = ["name", "city", "state","phone"]
B = ["album", "artist", "genre"]
C = ["title","author","category", "subcategory"]

还有标记为A、B 和C 的按钮。我想根据单击的按钮动态生成一个表单。所以如果B被点击了,我想用B中的项目来动态生成:

<form>
 <div class="form-group row">
    <label for="album" class="col-2 col-form-label">album</label>
    <div class="col-10">
      <input class="form-control" type="text" id="album">
    </div>
  </div>
  <div class="form-group row">
    <label for="artist" class="col-2 col-form-label">artist</label>
    <div class="col-10">
      <input class="form-control" type="text" id="artist">
    </div>
  </div>
  <div class="form-group row">
    <label for="genre" class="col-2 col-form-label">genre</label>
    <div class="col-10">
      <input class="form-control" type="text" id="genre">
    </div>
  </div>
</form>

【问题讨论】:

  • 我不太了解您的列表...对于初学者,我希望有字典,但如果这些是列表,我希望看到,例如,B = ["Ten", "珍珠果酱”、“垃圾摇滚”],对吧?
  • 是的,例如 B = ["Ten", "Pearl Jam", "Grunge"]
  • 可能这是解决方案:gist.github.com/doobeh/5d0f965502b86fee80fe

标签: python html jinja2


【解决方案1】:

如果我正确理解您的情况,我认为这是一个可行的解决方案。

Python 示例文件:

from flask import Flask, render_template

app = Flask(__name__)


B = ["Ten","Pearl Jam","Grunge"]

@app.route('/')
def main():
    return render_template('stuff.html', my_list=B)


if __name__ == '__main__':
    app.run(debug=True, port=5000)

模板示例文件:

<!doctype html>
<title>Test</title>
<div class=page>
  <h1>Data</h1>

  <form>
 <div class="form-group row">
    <label for="album" class="col-2 col-form-label">{{my_list[0]}}</label>
    <div class="col-10">
      <input class="form-control" type="text" id="album">
    </div>
  </div>
  <div class="form-group row">
    <label for="artist" class="col-2 col-form-label">{{my_list[1]}}</label>
    <div class="col-10">
      <input class="form-control" type="text" id="artist">
    </div>
  </div>
  <div class="form-group row">
    <label for="genre" class="col-2 col-form-label">{{my_list[2]}}</label>
    <div class="col-10">
      <input class="form-control" type="text" id="genre">
    </div>
  </div>
</form>



</div>

for 循环的模板示例:

<!doctype html>
<title>Test</title>
<div class=page>
  <h1>Data</h1>

    {% for item in my_list %}
    <li>{{item}}</li>
    {% endfor %}

</div>

【讨论】:

  • 此解决方案是一个可行的解决方案,但输入框/标签被定义为三个。它可以是动态的而不是三个吗?
  • 当然,您可以使用 for 循环。我将用一个简单的例子进行更新。
  • 这就是我建议使用字典而不是列表的原因
  • 您能否举例说明如何使用字典更好地动态创建输入?
  • 如果您需要更精确的帮助,我认为您需要提供更多当前代码
猜你喜欢
  • 2013-05-09
  • 2011-07-20
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 2021-09-06
  • 2020-10-29
  • 2013-10-04
  • 1970-01-01
相关资源
最近更新 更多