Python 在Flask app config的WTForms SelectField中设置默认值?
我很难根据Flask应用程序中的配置值在WTForms SelectField中设置默认值 我有一个Python 在Flask app config的WTForms SelectField中设置默认值?,python,flask,flask-wtforms,wtforms,Python,Flask,Flask Wtforms,Wtforms,我很难根据Flask应用程序中的配置值在WTForms SelectField中设置默认值 我有一个forms.py文件,其中部分包括: class MySearchForm(FlaskForm): title = StringField('Title') page_size = SelectField('Entries/page', choices=[(10, "10"), (25, "25"), (50, "50"), (100, "100")], default=25)
forms.py
文件,其中部分包括:
class MySearchForm(FlaskForm):
title = StringField('Title')
page_size = SelectField('Entries/page', choices=[(10, "10"), (25, "25"), (50, "50"), (100, "100")], default=25)
# other stuff
即使它似乎是正确的位置,我也不能通过将app config传递给this文件来将默认值设为变量,因为我得到了一个“在应用程序上下文之外工作”错误。所以我想我必须在运行时在Flask视图中使用一个动态默认值
我已经研究了其他一些关于这方面的问题,主要的问题似乎是——但我无法让它们中的任何一个起作用
搜索视图的Myroutes.py
大致如下:
form = MySearchForm(request.args)
if request.args: # if not, I display the search form
if form.title.data:
# construct relevant part of database query
page_size = int(form.page_size.data)
# other stuff: construct and execute DB query; render the view_results page
如果,在If request.args
语句之前,我尝试form.page\u size.default=current\u app.config['page\u size']]
,然后按照建议form.process()
,这会清除搜索表单中的任何其他内容,因此title
不会通过。如果我尝试form.page\u size.data=current\u app.config['page\u size']
,它不会将配置值设置为表单中的默认值,而只是在结果中设置
我还尝试了问题中讨论的技巧,将我的form
调用更改为form=MySearchForm(request.args,page\u size=current\u app.config['page\u size'])
。这也不能正常工作:在初始调用时,表单没有选择任何内容(在本例中,因此显示值“10”);配置的值正确用于搜索本身,但page\u size
的表单值保持为“10”。此外,实际选择表单中的值没有效果;无论用户在表单中选择什么,都将使用配置的值。(类似地,手动更改URL中的页面大小
也有相同的行为。)
我该怎么做?您需要检查要设置的变量类型的一致性 为此,在
选择字段
中,使用参数强制
如果变量app.config['PAGE\u SIZE']
是一个int
,则您希望如下声明表单字段:
page_size = SelectField('Entries/page',
choices=[(10, "10"), (25, "25"), (50, "50"), (100, "100")],
default=25,
coerce=int)
您需要检查要设置的变量类型的一致性 为此,在
选择字段
中,使用参数强制
如果变量app.config['PAGE\u SIZE']
是一个int
,则您希望如下声明表单字段:
page_size = SelectField('Entries/page',
choices=[(10, "10"), (25, "25"), (50, "50"), (100, "100")],
default=25,
coerce=int)
您是否尝试过使用此
SelectField
的concurve
属性?另外,检查app.config['PAGE\u SIZE']
的类型,如果它是int
或str
并且它与form.PAGE\u SIZE.default
或form.PAGE\u SIZE.data
的类型匹配,这取决于您选择设置此表单字段值的解决方案。啊,就是这样!是的,该值是一个int
,所做的只是在SelectField
声明中将str
强制到它。非常感谢。我来自Perl,这里没有这些问题;这已经咬了我好几次了。请注意:上面“设置默认值”问题中的第二个解决方案有效。您是否尝试过使用此SelectField
的improve
属性?另外,检查app.config['PAGE\u SIZE']
的类型,如果它是int
或str
并且它与form.PAGE\u SIZE.default
或form.PAGE\u SIZE.data
的类型匹配,这取决于您选择设置此表单字段值的解决方案。啊,就是这样!是的,该值是一个int
,所做的只是在SelectField
声明中将str
强制到它。非常感谢。我来自Perl,这里没有这些问题;这已经咬了我好几次了。作为记录:上面的第二个解决方案,来自“设置默认值”问题,有效。