【问题标题】:SelectField renders unicode syntaxSelectField 呈现 unicode 语法
【发布时间】:2015-05-08 21:54:58
【问题描述】:

在 WTForms 中为 SelectField 动态创建选项时,我会在下拉列表中呈现 (u'Choice',)。 我怀疑它与 unicode 有关,但不知道如何获取正确的字符串。

例如

form.group_id_name.choices = [(row, row) for row in db.session.query(entry.group_id_name).distinct()]

在我的表单中

 group_id_name = SelectField('group_id_name')

我想让它渲染

<select id="group_id_name" name="group_id_name"><option value="Choice1">Choice1</option><option value="Choice2">Choice2</option></select>

我得到了

<select id="group_id_name" name="group_id_name"><option value="(u'Choice1',)">(u'Choice1',)</option><option value="(u'Choice2',)">(u'Choice2',)</option></select>

【问题讨论】:

    标签: forms unicode flask-wtforms


    【解决方案1】:

    这与 Unicode 无关。

    query() 为每一行返回一系列列值。对于只有一列的查询,您会得到一个长度为 1 的元组。

    当您将元组隐式转换为字符串作为模板的一部分时,您将获得元组的 Python 代码表示形式,类似于 (somevalue,)

    您希望在模板中包含列本身的字符串值,因此您应该访问序列的第一个元素,例如:

    form.group_id_name.choices = [(row[0], row[0]) for row in db.session.query(entry.group_id_name).distinct()]
    

    或使用解包赋值:

    form.group_id_name.choices = [(name, name) for (name,) in db.session.query(entry.group_id_name).distinct()]
    

    【讨论】:

    • 谢谢,就是这样。我是 python 新手,整个列表、元组、字典及其组合有点令人困惑。非常强大,但令人困惑。
    猜你喜欢
    • 2016-02-20
    • 2012-11-14
    • 2016-09-13
    • 1970-01-01
    • 2012-01-19
    • 2016-03-03
    • 2021-03-10
    • 2020-06-29
    • 1970-01-01
    相关资源
    最近更新 更多