将Python*参数列表传递给object可以在一个方法内部工作,但不能在另一个方法内部工作?

2024-04-25 17:58:14 发布

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

我试图将参数列表传递给Django crispy form Tab()类。 首先,我从btn\u列表输入构建一些按钮,并尝试将其传递回helper对象。 在第一个示例中,我返回了整个Tab()对象。但是我有点困惑,为什么我不能仅仅返回Div()对象作为一个列表,然后将它们作为参数传递到helper中的Tab()对象中呢?似乎当我在助手python中使用星号时会出现语法错误。 有什么想法吗?你知道吗

def build_button_list(btn_list):#generates a list of buttons from the given input
    base_fmt = 'btn btn-block '
    btn_layout = []
    for btn in btn_list:
        btn_layout.append(  Div( HTML("<b>"+btn['title']+"</b>"), \
                            Div(
                                Button('BtnProfile1', 'Persional Information', onclick="location.href='"+btn['link']+"'",
                                    css_class=base_fmt+btn['size']+" "+btn['style']),
                                css_class="row",
                                )
                            )
                         )

    return Tab('tab name', *btn_layout) #NOTICE THE ASTERISK * !!!! 

class gettingStarted(forms.Form):
    ....
    ....
    btn_list = [blah,blah]

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.layout = Layout(
             TabHolder(
                  build_button_list( btn_list ), #makes a list of formatted buttons
             )
        )

但是,当我尝试更改布局并将Tab对象添加到gettingStarted()。init()方法而不是make_button_list()方法时,python会抱怨语法错误,并且不接受使用星号:

def build_button_list(btn_list):
    base_fmt = 'btn btn-block '
    btn_layout = []
    for btn in btn_list:
        btn_layout.append(  Div( HTML("<b>"+btn['title']+"</b>"), \
                            Div(
                                Button('BtnProfile1', 'Persional Information', onclick="location.href='"+btn['link']+"'",
                                    css_class=base_fmt+btn['size']+" "+btn['style']),
                                css_class="row",
                                )
                            )
                         )
    return btn_layout

class gettingStarted(forms.Form):
    ....
    ....
    btn_list = [blah,blah]

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.layout = Layout(
                   # SYNTAX ERROR???
                   Tab(
                       'tab name', 
                       *build_button_list( btn_list ), #NOTICE THE ASTERISK *
                      ),
        )

谢谢!!你知道吗


Tags: 对象buildselfdivhelperbasedefbutton
1条回答
网友
1楼 · 发布于 2024-04-25 17:58:14

好的,当传递*参数时,后面不能有逗号。我没有注意到它,一直在想,为什么当我添加星号python时,它会抱怨,当我删除它时,它不会抱怨。因此,我假设这是可怜的小星号的错,而事实上,这是我在那里留下的那个鬼鬼祟祟的逗号,考虑到星号实际作用的性质,这是有道理的:)

因此,我们要澄清的是,这一点现在正如期发挥作用:

def __init__(self, *args, **kwargs):
    self.helper = FormHelper()
    self.helper.layout = Layout(
               Tab(
                   'tab name', 
                   *build_button_list( btn_list ) #NOTICE THE COMMA IS GONE!
                  ),
    )

相关问题 更多 >