Python 如何为不同的标签创建相同的下拉菜单?
我正在Flask中构建一个应用程序,它从不同的CSV文件中获取数据。我有不同的标签(CSV文件中的列名),每个标签都有相同的下拉菜单。比如说-Python 如何为不同的标签创建相同的下拉菜单?,python,csv,flask,jinja2,Python,Csv,Flask,Jinja2,我正在Flask中构建一个应用程序,它从不同的CSV文件中获取数据。我有不同的标签(CSV文件中的列名),每个标签都有相同的下拉菜单。比如说- 运输方式 选择题 单选 暂时的 时间戳 选择题 单选 暂时的 首先,我尝试创建这个模板。这是我的密码- <div class="container"> <form class="col s12" action="/config" method="POST" enctype="multipart/form-data">
- 选择题
- 单选
- 暂时的
- 选择题
- 单选
- 暂时的
<div class="container">
<form class="col s12" action="/config" method="POST" enctype="multipart/form-data">
<div class="row">
<h2>Assign Fieldnames</h2>
{% for x in title %}
<label> {{ x }} :</label>
<select name="choice">
<option value="">Select One</option>
<option value="time">Temporal</option>
<option value="single">Single Choice</option>
<option value="multiple">Multiple Choice</option>
</select>
{% endfor %}
<input type="hidden" name="filename" value= {{filename}}></input>
<button class="btn" type="submit" value="Update">Submit</button>
</div>
</form>
</div>
其次,我无法确定如何为每个标签保存这些选项(多选、单选和时态),以便在将此CSV发送到Mongodb后可以根据这些选项查询数据。每个标签只能保存一个选项。您将在
POST
请求中收到的邮件。这些值将在MultiDict类型的请求.表单
中可用,它们是唯一有效的值,您应该存储在数据库中。您可以通过request.form
对象访问它们
从HTML表单中,您似乎只会收到请求.form
-“choice”中的另一项,并且它将有两个值。因此,您必须解决如何区分这两个值中与“传输模式”和“时间戳”相关联的值。我怀疑它们是否会以与表单相同的顺序出现,因此我更愿意在select
标记的name
属性中提供不同的名称
不幸的是,您没有指明什么是
标题,因此看起来您应该使用任何一个循环来遍历请求。形成对象并将变量与接收到的值关联,或者以某种方式对它们进行硬编码。第一步是将每个标签选择选项与唯一的特定名称相匹配,以便能够在以下视图中关联它们
模板
可以使用循环的索引来执行此操作
{% for name in title %}
<label> {{ name }} :</label>
<select name="choice-{{ loop.index }}">
<option disabled selected value> Select One</option>
<option value="time">Temporal</option>
<option value="single">Single Choice</option>
<option value="multiple">Multiple Choice</option>
</select><br>
{% endfor %}
列表最好能处理一行中的所有标题并保持顺序:
choices = []
with open(request.form['filename'], 'r') as csvfile :
reader = csv.reader(csvfile)
titles = next(reader)
for index, title in enumerate(titles,1):
choice = 'choice-' + str(index)
choices.append((title, request.form.get(choice))
#choices = [('Mode of Transport','time'), ('Timestamp','multiple')]
你能把/config
路由的代码包括进来吗?@LuisOrduz我已经更新了编码。你能解释我这一行的索引,枚举中的标题(标题,1):
?枚举
返回一个带有索引和相关值的元组,通过在参数中添加1
,它使索引从1开始,而不是从0开始。然后对于索引,title
是解压返回元组并将名称与值关联的语法。这似乎不起作用。是否有任何方法可以通过使用字段数进行循环?我可以获得标签名称,但下拉列表不起作用。您能告诉我哪里出错了吗?这种方法基于csv文件头给定的字段,应该与填充html模板时使用的方法相同。也许我错过了什么?什么不适用于下拉菜单?
@app.route("/config", methods=['POST'])
def config():
choices = {}
with open(request.form['filename'], 'r') as csvfile :
reader = csv.reader(csvfile)
titles = next(reader)
for index, title in enumerate(titles,1):
choice = 'choice-' + str(index)
choices[title] = request.form.get(choice)
#choices = {'Mode of Transport': 'time', 'Timestamp':'multiple' }
choices = []
with open(request.form['filename'], 'r') as csvfile :
reader = csv.reader(csvfile)
titles = next(reader)
for index, title in enumerate(titles,1):
choice = 'choice-' + str(index)
choices.append((title, request.form.get(choice))
#choices = [('Mode of Transport','time'), ('Timestamp','multiple')]