【问题标题】:Chained Dropdown in flask, get data from sqlite database烧瓶中的Chained Dropdown,从sqlite数据库中获取数据
【发布时间】:2015-08-21 12:25:12
【问题描述】:

我正在尝试获取具有不同县的 html 选择标签(从数据库中获取),当用户选择了一个县时,我想要另一个选择标签来启用并显示该县的城市(我有一个sqlite 数据库,其中县 id 在城市数据库中)。我在 Pycharm 中使用 python,带有烧瓶,但我还没有找到任何好的教程。

有没有一种简单的方法可以使用一些扩展来烧瓶?我看到了一些关于 sijax 的东西,但我一直不明白如何使用它。

我的代码是这样的,但我猜城市部分必须通过一些 javascript 东西来创建:

        <div class="form-group">
            <label for="inputCounty">County</label>
            <select class="form-control" id="select_county" name="select_county">
                <option value="">Choose county</option>
                {% for county in counties %}
                    <option value="{{ county.id }}">{{ county.name }}</option>
                {% endfor %}
            </select>
        </div>
        <div class="form-group">
            <label for="inputCity">City</label>
            <select class="form-control" id="select_city" name="select_city">
                <option value="">Choose city</option>
                {% for city in cities %}
                    <option value="{{ city.id }}" class="{{ city.county }}">{{ city.name }}</option>
                {% endfor %}
            </select>
        </div>

我尝试了一个“链式”-javascipt 插件,但它不起作用,但这就是为什么我在选项标签中有类。

现在县和所有城市都被发送到 html 模板,但我认为这在以后是不可持续的,因为我想在城市中添加另一个下拉列表,所以我必须发送很多数据永远不会被使用。

【问题讨论】:

  • 您可以尝试实现“占位符”-首先隐藏的下拉元素。在用户在第一个下拉列表中选择一个县后,填充并使其可见。 Flask 只会提供相应的服务。返回 html-template 和 javascript 应该完成其余的工作
  • 不,Flask 绝对无法在不刷新整个页面的情况下单独执行此操作。要执行您所描述的操作,您必须将 AJAX 请求发送回服务器并使用 JavaScript 操作响应。 Jinja2 帮不了你;这就是 HTTP 的工作方式。我会以更详细的方式回答,但这个问题非常开放,我不知道你的堆栈是什么样的。

标签: javascript python sqlite drop-down-menu flask


【解决方案1】:

在您的head 中,添加一个用于更改选择值的处理程序:

<script type="text/javascript">
    $("#select_county").change(function() {
        $.ajax({
            type: "POST",
            url: "{{ url_for('select_county') }}",
            data: {
                county: $("#select_county").val()
            },
            success: function(data) {
                $("#select_city").html(data);
            }
        });
    });
</script>

这使用jquery.change 检测县选择何时更改,并使用jquery.ajax 将选择的值发送到您的后端,类似于:

@app.route('/select_county', methods=['POST'])
def select_county():
    ret = ''
    for entry in ...your_database_query...:
        ret += '<option value="{}">{}</option>'.format(entry)
    return ret

这个&lt;option&gt;标签列表然后通过jquery.html插入到第二个选择中。

【讨论】:

  • 谢谢!在一些问题之后它起作用了:) 像这样制作 ret: ret += '' % (entry[2], entry[0])
  • @ruggalainen:不确定是否仍然相关,但我添加了另一个解决方案here,它利用了 Celeo 这个不错的答案。
猜你喜欢
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
相关资源
最近更新 更多