我想从下拉列表中选择一个值并相应地显示网页。目前,我可以通过在URL末尾键入下拉列表的每个值来访问它。我到底缺了什么?当我在浏览器中键入/metadata/table_name1
metadata/table_name2
时,我可以访问它。但是当我从下拉列表中选择选项时,我无法得到它。下拉列表应该重定向到metadata/drop_down_value
。在
我已经通过打印出单独的url路由链接进行了测试。通过点击链接,它就起作用了。我需要从下拉列表中选择。在
观点:
@app.route('/metadata', methods=['GET', 'POST'])
def metadata():
cols = None
table = None
db_uri = session.get('db_uri', None)
eng = create_engine(db_uri)
insp = reflection.Inspector.from_engine(eng)
tablenames = insp.get_table_names()
form = SelectTableForm()
form.table_name.choices = tablenames
cols = insp.get_columns(table_name=tablenames[0])
eng.dispose()
return render_template('tables.html', cols=cols, table=tablenames[0], form=form)
@app.route('/metadata/<table>', methods=['GET', 'POST'])
def select_table(table):
form = SelectTableForm()
db_uri = session.get('db_uri', None)
eng = create_engine(db_uri)
insp = reflection.Inspector.from_engine(eng)
tablenames = insp.get_table_names()
form.table_name.choices = tablenames
cols = insp.get_columns(table_name=table)
return render_template('tables.html', cols=cols, table=table, form=form)
形式:
^{pr2}$Jinja html:
<!-- This works -->
{% for table in form.table_name.choices %}
<a href="{{ url_for('select_table', table=table) }}">{{ table }}</a>
{% endfor %}
<!-- This does not -->
<form action="">
<select name="tables" method="POST" type="submit">
{% for table in form.table_name.choices %}
<option value="{{ url_for('select_table', table=table) }}">{{ table }}</option>
{% endfor %}
</select>
</form>
<table>
<tr>
<th>table</th>
<th>name</th>
<th>type</th>
<th>nullable</th>
<th>default</th>
<th>autoincrement</th>
<th>comment</th>
</tr>
{% for col in cols %}
<tr>
<td>{{ table }}</td>
{% for val in col.values() %}
<td>{{ val }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
您需要一点js,将当前页面的url设置为select元素中所选选项的值:
onchange="location = this.value;"
。在相关问题 更多 >
编程相关推荐