web2py 自动完成小部件不是 "CSS-friendly"?
web2py autocomplete widget not "CSS-friendly"?
模型中:
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 友好标签不应该是正常行为吗?
还是我做错了什么?
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
指定的样式,与其他表单小部件一样。因此,不再需要上述解决方法。
模型中:
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 友好标签不应该是正常行为吗? 还是我做错了什么?
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
指定的样式,与其他表单小部件一样。因此,不再需要上述解决方法。