我试图将一个参数列表传递给Django crispy表单Tab()类。 首先,我从btn_list输入构建一些按钮,并尝试将其传递回辅助对象。 我能够在第一个示例中完成此工作,其中我返回整个Tab()对象。但我有点困惑,为什么我不能将Div()对象作为一个列表返回,然后将它们作为参数传递给帮助器中的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
)
)
然而,当我尝试更改布局并在gettingStarted()。 init ()方法而不是make_button_list()方法中添加Tab对象时,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 *
),
)
谢谢!
答案 0 :(得分:2)
好的,当传递* args时你不能有一个尾随的逗号。我没有注意到它,并一直想知道为什么当我添加一个星号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!
),
)