使用数组填充SelectField选项

2024-04-27 03:08:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我试图用一个列表填充wtfselectfield,这个列表是从slackapi获取数据的函数返回的。该列表包含频道名称,我想将其设置为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   

它们的格式如下:

^{pr2}$

我希望以这种格式将其传递到我的函数中:

('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被抛出。
我怎样才能做到这一点?我觉得我离得很近,但却错过了一些东西。在

解决方案: 问题在于我错误地理解/不知道如何返回数据并因此将其传递到其他地方。在

在“我的获取频道”列表函数中修改了以下内容:

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,)

Tags: 函数代码nametoken列表getslack频道
1条回答
网友
1楼 · 发布于 2024-04-27 03:08:32

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

将其更改为:

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

或者更像Python:

^{pr2}$

带工作窗体的HTML:
enter image description here

相关问题 更多 >