【问题标题】:WTForms, radiofields with additional 'labels'WTForms,带有附加“标签”的无线电场
【发布时间】:2016-01-03 19:18:58
【问题描述】:

我在模板中呈现了一个动态生成的 RadioField

class F(Form):
    pass

F.selection = RadioField(
    'selection',
    choices=options,
    validators=[
        DataRequired()
    ]
)

'options' 是一个生成的元组数组,这很好用。当我的模板中有此选项时,它会打印选项

{% for subfield in form.selection %}
<p>
<tr>
    <td>{{ subfield }}</td>
    <td>{{ subfield.label }}</td>
</tr>
</p>
{% endfor %}

我现在面临的问题是,这给了我一组单选按钮,旁边有一个文本。在这种情况下,我希望人们选择的“标题”。

但我想在那里获得更多信息,例如。描述、尺寸、图片等。

我目前尝试使用这些额外信息制作一个元组列表并将其传递给模板。我可以在那里访问额外的信息,但我不知道如何同时迭代两组数据

{% for item in data %}
<p>
    {{ item[0] }}
    {{ item[1] }}
    {{ item[2] }}
</p>
{% endfor %}

我想要的是把它放在一个 for 循环中,这样我就可以做出漂亮的“增强”选项。现在我会使用 zip,但我不能在 Jinja2 中这样做(我认为)而且我不能预先压缩它,因为 radiofield 选择参数不会接受。

有什么建议吗?

【问题讨论】:

    标签: python python-3.x flask jinja2 flask-wtforms


    【解决方案1】:

    这将在后端/Python 端使用:

    form = TestRadio()
    form.radio.choices = [('one', '1'), ('two', '2')]
    extra_stuff = [('a', 'b', 'c'), ('d', 'e', 'f')]
    

    TestRadio继承自flask-wtf Form,如下:

    class TestRadio(Form):
        radio = RadioField()
    

    假设extra_stuff的长度与选择数相同,那么在jinja2中:

    <form>
        <table>
        {% for subfield in form.radio %}
        <tr>  
            <td> {{ form.csrf_token }} </td>
            <td> {{ subfield }} </td>
            {% for item in extra_stuff[loop.index0] %}
              <td> {{ item }} </td>
            {% endfor %}
        </tr>
        {% endfor %}
        </table>
    </form>
    

    在 Python 端,在一个视图函数中总结集合 choices。诀窍是我使用的这个loop 变量。它跟踪外层 for 循环的索引。 (http://jinja.pocoo.org/docs/dev/tricks/#accessing-the-parent-loop)

    关于添加图片:

    http://flask.pocoo.org/docs/0.10/quickstart/#static-files

    【讨论】:

    • 好吧,我可能在这里遗漏了一些东西——我对使用 WTForms 和 jinja 还很陌生——但是如果你在块 #1 中执行你在此处所做的事情,那么你会创建几个 RadioFields。然后在块 #2 中为每个 RadioField 创建几个选项。但是我只需要一个带有一个选择数组的 RadioField,只是该选择数组中的每个元素都需要与额外的数据相关联。不是 RadioField 本身。也许我在那里不清楚。
    • 那如果我理解正确就容易多了。只需使用上面的 radio.choices 之类的东西,然后将压缩数据提供给它。
    • 啊,但就我所尝试的而言,这不起作用。 Choices 只接受像这样的东西 Choices = [('choice_1', 'something'),('choice_2','something_else')] 基本上,如果我将其设为更大的元组数组,您会得到: ValueError: too many values to unpack (预期2)我也尝试将元组中的第二部分设为另一个列表,但它只接受字符串。
    • @Thustra 只是出于好奇,你的结果如何?
    • 您好,我将在 reddit 线程上发布一个链接,在该线程中我设法通过一些帮助修复它reddit.com/r/flask/comments/3z0w8y/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2014-06-01
    相关资源
    最近更新 更多