Python 如何在瓶子中获取多列表中的所有项目?

Python 如何在瓶子中获取多列表中的所有项目?,python,bottle,Python,Bottle,我有一个表单,允许我使用js添加到多列表中。我希望能够将该列表中的所有数据发布到我的瓶子服务器,但我无法获取其中的任何数据。如何将对账单中的所有项目发布到server.py?发布后如何访问此发布数据 相关代码: server.py: @bottle.route('/saveList', method='POST') def save_list(): forms = bottle.request.get('the_list') print forms # returns 'None

我有一个表单,允许我使用js添加到多列表中。我希望能够将该列表中的所有数据发布到我的瓶子服务器,但我无法获取其中的任何数据。如何将对账单中的所有项目发布到server.py?发布后如何访问此发布数据

相关代码:

server.py:

@bottle.route('/saveList', method='POST')
def save_list():
    forms = bottle.request.get('the_list')
    print forms # returns 'None'
    return bottle.redirect('/updatelist') # just redirects to the same page with a new list
list.tpl

 <select multiple="multiple" id="the_list" name="the_list">
     %for item in my_ list:
     <option>{{item}}</option>
     %end
 </select>
编辑:

我试图得到整个列表,而不仅仅是选定的值。用户通过textfield、button、JS等方式添加到multi;所以我想得到所有的值或者所有的新值

编辑2:

我使用提供的答案和一些js来获得期望的结果:

$('.add_to_the_list').click(function (e) {
...
var new_item = $('<option>', {
                value: new_item_str,
                text: new_item_str,
                class: "new_item" // the money-maker!
            });
...

function selectAllNewItem(selectBoxId) {
    selectBox = document.getElementById(selectBoxId);
    for (var i = 0; i < selectBox.options.length; i++) {
        if (selectBox.options[i].className === "new_item") { // BOOM!
            selectBox.options[i].selected = true;
        }
    }
}

...
    $('#submit_list').click(function (e) {
        selectAllNewBG("the_list")
    });

要返回多个值,请使用.getall。这是我可以使用的代码

import bottle

@bottle.route('/saveList', method='POST')
def save_list():
    forms = bottle.request.POST.getall('the_list')
    print forms 
    return bottle.redirect('/updatelist')

@bottle.route('/updatelist')
@bottle.view('index')
def index():
    return {}

bottle.run()
HTML

<html>
    <body>
        <form method="post" action="http://localhost:8080/saveList">
             <select multiple="multiple" id="the_list" name="the_list">
                 <option value="1">Item 1</option>
                 <option value="2">Item 2</option>
                 <option value="3">Item 3</option>
             </select>
            <input type="submit" />
         </form>
    </body>
</html>

第一次选择了两个对象,第二次没有选择任何对象

你很接近;试试这个:

all_selected = bottle.request.forms.getall('the_list')
您将需要使用和。forms返回一个MultiDict,它是存储多个选定选项的适当数据结构。getall是从MultiDict检索值列表的方式:

for choice in all_selected:
    # do something with choice
或者,更简单地说:

for selected in bottle.request.forms.getall('the_list'):
    # do something with selected

您正在尝试获取POST数据,请从瓶子.request.POST检索它。瓶子。请求。张贴。获取“清单”应该适合你。您可能还必须为选项赋值,即{item}}仍然不返回任何值。我添加了一个显示工作代码的答案,而不是.get,使用.getall.try-request.POST.getlist'the-list'。这几乎就是我试图做的。如何获取列表中的所有项目(无论是否选中)?我需要让一些js在提交之前选择所有东西吗?这是一个选项,但是因为你已经有了那些你将要生成列表的项目,你可以让你的生活简单很多。我想:如果它们是静态项,我只需从两个函数中的全局变量中提取它们。如果它们是动态的,我会定义一个隐藏的输入,它只列出用逗号分隔的选项,然后抓住它,在上面做一个.split。这可能是一个更好的主意。ATM,我让js选择所有内容并提交。我不能改变蓝色的高光颜色使其变为白色,这给人一种错觉,认为我没有做什么愚蠢的事情。我以后可能必须更改此设置。无论是否选中,我如何获取所有内容?看起来您找到了一个解决方案。如您所发现的,您的web应用将只接收选定的选项。
for selected in bottle.request.forms.getall('the_list'):
    # do something with selected