【发布时间】:2016-12-20 13:50:21
【问题描述】:
我目前正试图为我的 Flask 表单构建可变消息闪烁功能
由于我正在构建一个必须支持多种语言的工具,因此我希望根据特定语言输入为我的烧瓶表单验证创建自定义消息。
我的表单看起来像这样:
class messageForm(FlaskForm):
title = StringField(
'title',
validators=[
validators.DataRequired(validationMessage('validateRequired', language=language))
]
)
函数“validationMessage”如下所示:
def validationMessage(message, language):
msg = Message.query.filter_by(title=message).first()
lang = Language.query.filter_by(abbr=language).first()
text = messageBody.query.filter_by(message_id=msg.id, language_id=lang.id).first().text
return text
如您所见,我在几个数据库表中进行了一些查找以生成我的消息文本。
我现在的麻烦是... 如何将视图中的语言变量传递给表单,以便将其传递给“validationMessage”函数?
语言变量基于我的视图端点中的变量
# Messages
@admin.route('/<string:language>/message', methods=['GET'])
def messageView(language='dk')
form=messageForm()
...
我考虑过为此使用我的会话,但据我了解,我只能在我的视图中使用它,因此不能在我的表单或消息功能中使用
【问题讨论】:
-
您始终可以在表单中添加一个 HiddenField,然后在您在视图中构造它之后设置该参数。然后该值应该在您的表单实例中可供您使用
-
我可以这样做,如果我需要将变量传递给我的模板,不幸的是我需要将变量传递给我的 Form 类,因此它对我不起作用。跨度>
-
我假设您使用的是flask-wtforms?如果是这样,可以使用字段的 kwargs 实例化表单。因此,如果您有一个名为
lang的HiddenField,您的表单可以实例化为form=messageForm(lang=language)。然后将验证器language参数设置为您的HiddenField -
尝试这个我不幸得到以下错误:
-
问题实际上是
validationMessage函数仅在初始化验证器时被调用。当您启动 Flask 应用程序时,就会发生这种情况。稍后在表单验证中不再调用它。所以这种方法根本行不通。
标签: python forms flask parameter-passing