如何在Jinja 2循环中设置字段属性

时间:2019-06-25 10:29:17

标签: flask jinja2 flask-wtforms

嗨,我是编程新手,需要您的帮助。我有一个浮动字段的字段列表,每个字段应显示不同的默认值。

我想通过在模板中进行修改来更改默认属性,但是它不起作用。


<div class="form-group">
            {% for entry in form.pde_parameters %}
            {% set entry.default=pde_parameter_value_list[loop.index0]%}
            {{ pde_parameter_list[loop.index0] }}
            {{ entry.hidden_tag() }}
            {{ render_field(entry.parameter_value) }}
            {% endfor %}


        </div>

class NewModelParameterMaskForm(FlaskForm):
    parameter_value = FloatField("")


class Solution(FlaskForm):
    pde_parameters = FieldList(FormField(NewModelParameterMaskForm), min_entries=1)
    sde_parameters = FieldList(FormField(NewModelParameterMaskForm), min_entries=1)

我收到此错误消息: jinja2.exceptions.TemplateRuntimeError:无法在非命名空间对象上分配属性

2 个答案:

答案 0 :(得分:0)

您需要先填写表格 ,然后再将其传递给Jinja,而不是模板内部。

def show_solution():
    form = Solution(request.form)

    if form.validate_on_submit():
        # Use form values
        return redirect(url_for('done'))

    for s in solutions(): # Fetch your solutions from somewhere
        form.pde_paramaters.append_entry({'parameter_value': s.float_value})

    return render_template('solution.html', form=form)

答案 1 :(得分:0)

我收到了同样的错误。在问题的情况下,我找到的解决方案看起来与此类似:

{% set update_result = entry.update({'default': pde_parameter_value_list[loop.index0]}) %}

然后忽略update_result变量并正常使用entry

Jinja似乎不允许直接设置对象内字段/属性的值。但是,如果这些是字典或列表,则可以使用updateappend之类的方法,因为它们会在内部更改对象。