python - 在 Flask 应用程序配置中的 WTForms SelectField 中设置默认值?
问题描述
我很难根据我的 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)
# other stuff
尽管这似乎是正确的地方,但我无法通过将应用程序配置传递给此文件来将默认值设为变量,因为我收到“在应用程序上下文之外工作”错误。所以我认为我必须在运行时在我的 Flask 视图中使用动态默认值来做到这一点。
我已经查看了有关此问题的许多其他 StackOverflow 问题——主要问题似乎是如何为 WTForms SelectField 设置默认值?——但我不能让它们中的任何一个工作。
我routes.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_size.default = current_app.config['PAGE_SIZE']
and then form.process()
,按照建议,这会清除搜索表单中的其他任何内容,因此title
不会通过。如果我尝试form.page_size.data = current_app.config['PAGE_SIZE']
,它不会在表单中将配置值设置为默认值,而只是在结果中。
我还尝试了在 SelectField flask-WTForms问题中初始化后设置默认值中讨论的技术,将我的form
调用更改为form = MySearchForm(request.args, page_size=current_app.config['PAGE_SIZE'])
. 这也不能正常工作:在初始调用中,表单没有选择任何内容(在这种特定情况下,因此显示值“10”);配置的值被正确地用于搜索本身,但表单值page_size
保持在“10”。此外,实际选择表单中的值没有任何效果;无论用户在表单中选择什么,都会使用配置的值。(类似地,手动更改page_size
URL 具有相同的行为。)
我该怎么做?
解决方案
您需要检查要设置的变量类型的一致性。
为此,在您的 中SelectField
,使用参数coerce
。
如果变量app.config['PAGE_SIZE']
是一个int
,你想像这样声明你的表单域:
page_size = SelectField('Entries/page',
choices=[(10, "10"), (25, "25"), (50, "50"), (100, "100")],
default=25,
coerce=int)
推荐阅读
- vim - Windows终端中文本周围的vim黑框
- java - 替换 IntelliJ 中的双括号初始化
- react-native - 尝试使用 SVG 图像时元素类型无效
- perl - 连接到 WebSocket 给出“握手错误:错误的响应行”
- python - 使用 Python 修改列中的所有数据
- java - 如何在android中旋转带有动画的东西
- database - SPARQL 查询。“分组依据”,然后根据条件“计数”组中的某些项目。包括计数为零的项目
- testing - 如何减慢 TestCafe 中的测试执行速度?
- java - 在 GraphQL 中不能有带有嵌套字段的输入类型。错误:预期类型是 GraphQLInputType,但不是
- javascript -
在插入之后添加