web2py自动完成小部件不是“CSS友好”?

时间:2017-03-12 11:10:28

标签: autocomplete web2py

模特:

db.define_table('mytable',
                 Field('auto'),
                 Field('manual')
                )
db.mytable.auto.widget=SQLFORM.widgets.autocomplete(request,db.mytable.auto)

在控制器中:

def index():
    form = SQLFORM(db.mytable)
    return locals()

结果:具有自动完成功能的字段看起来很糟糕,因为它没有得到任何CSS样式,而另一个字段看起来不错。

正如我所说的here我可以在控制器中做到:

form.custom.widget['auto'][0].add_class('form-control')

这使得自动填充字段看起来也很不错。

但是,自动完成小部件提供与其他输入字段相同的CSS友好标记不应该是正常行为吗? 或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

Bootstrap 3 formstyle函数(这是web2py脚手架应用程序中的默认formstyle)无法正确设置自动完成窗口小部件的样式(这应该更正)。

作为一种解决方法,如果您希望样式影响从DAL模型生成的所有表单,您也可以这样做:

autocomplete = SQLFORM.widgets.autocomplete
db.mytable.auto.widget = \
    lambda f, v: autocomplete(request, db.mytable.auto)(f, v, _class='form-control')

或者要制作专门的Bootstrap自动完成小部件以用于任何字段,您可以执行以下操作:

def bootstrap_autocomplete(*args, **kwargs):
    widget = SQLFORM.widgets.autocomplete(*args, **kwargs)
    return lambda f, v: widget(f, v, _class='form-control')

然后在定义模型时,您可以:

db.mytable.auto.widget = bootstrap_autocomplete(request, db.mytable.auto)

更新:自动完成窗口小部件已修复 - 它现在使用formstyle指定的样式,与其他窗体小部件一样。因此,不再需要上述解决方法。