通过CGI发送时,Python列表对象变为文本字符串

0 投票
2 回答
779 浏览
提问于 2025-04-17 02:10

我有一个列表对象,我想通过CGI把它发送到一个脚本里。这个列表是通过HTML表单中的一个隐藏字段发送的。当我在接收脚本中提取这个对象时,我用my_list = form.getlist['name_of_hidden_field'],结果发现my_list的第一个元素里存的是一个很大的文本字符串,而不是我想要的列表。我哪里做错了呢?

# snippet of code from the script with the HTML
my_list = ['string1', 'string2', 'string3]
print '<form name="input" action="my_script.py">'
print '<input type="hidden" name="my_list" value="%s">' % (my_list,)
print '<input type="submit" name="submit" value="Submit" />'
print "</form>"

# snippet of code from my_script.py
my_list = form.getlist('my_list')

# what I'm seeing in my_script.py
>>>print my_list
["['string1', 'string2', 'string3']"]

谢谢你的建议。

2 个回答

1

通过CGI发送这个列表会把它变成一个字符串。

要把它转换回来,可以使用:

import ast

my_list = "['string1', 'string2', 'string3']"
my_new_list = ast.literal_eval(my_list)
print my_new_list 
1

你需要把这个列表作为一组不同的 input 发送,而且这些 input 的名字要一样,这样 getlist 才能获取到这些元素:

my_list = ['string1', 'string2', 'string3']
print '<form name="input" action="my_script.py">'
for element in my_list:
    print '<input type="hidden" name="my_list" value="%s">' % (cgi.escape(element),)
print '<input type="submit" name="submit" value="Submit" />'
print "</form>"

撰写回答