这里的新手,编写Python脚本已有6个月多了。

我正在尝试使用从Slack API获取数据的函数返回的列表填充wtf SelectField。该列表包含通道名称,我想将其设置为SelectField的选择。

这是我的函数的代码:

def get_channels_list(slack_token):
    sc = SlackClient(slack_token)
    a = sc.api_call('channels.list',
                    exclude_archived=1,
                    exclude_members=1,)

    a = json.dumps(a)
    a = json.loads(a)

    list1 = []
    for i in a['channels']:
        str1 = ("('%s','#%s')," % (i['name'],i['name']))
        list1.append(str1)
    return list1


它们以以下格式出现:

[u"('whoisdoingwhat','#whoisdoingwhat'),",
 u"('windowsproblems','#windowsproblems'),",
 u"('wow','#wow'),",
 u"('wp-security','#wp-security'),",]


我想以这种格式传递给我的函数:

('whoisdoingwhat','#whoisdoingwhat'),
('windowsproblems','#windowsproblems'),
('wow','#wow'),
('wp-security','#wp-security'),


这是有问题的代码:

class SlackMessageForm(Form):
    a = get_channels_list(app.config['SLACK_API_TOKEN'])
    channel =   SelectField('Channel',
                        choices=[a],)


当然,会抛出ValueError: too many values to unpack
我该怎么做?我觉得我很亲密,但是缺少一些东西。

解:
问题在于我对如何返回数据以及如何将其传递到其他地方有错误的理解/了解。

在我的get_channels_list函数中修改了以下内容:

for i in a['channels']:
    # str1 = ("('%s','#%s')," % (i['name'],i['name']))
    list1.append((i['name'],'#'+i['name']))


这将返回一个元组列表。
现在,将其作为参数传递给SelectField对象,不带方括号:

class SlackMessageForm(Form):
    a = get_channels_list(app.config['SLACK_API_TOKEN'])
    channel =   SelectField('Channel',
                            choices=a,)

最佳答案

您不必在for函数的get_channels_list循环中创建字符串。

更改为此:

for i in a['channels']:
    list1.append((i['name'], '#' + i['name']))


甚至更pythonic:

return [(i['name'], '#' + i['name']) for i in a['channels']]


具有工作形式的HTML:
python - Flask-用数组填充SelectField选择-LMLPHP

关于python - Flask-用数组填充SelectField选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45877050/

10-10 11:01