Как установить form.data в шаблоне jinja? - PullRequest
0 голосов
/ 18 июня 2020

Я хочу предварительно установить некоторые данные в wtform, используя шаблон jinja, потому что for l oop для получения переменной происходит в jinja. Есть хороший способ сделать это?

Так все устроено.

Шаблон Jinja l oop:

{% if volumes %}
    {% for volume_pair in volumes %}
        {% set form.volumes.data = namespace(volume_pair) %}
        {{ f.render_form_field(form.volumes) }}
    {% endfor %}
{% endif %}

forms.py:

class DeployForm(FlaskForm):
    name = StringField('App Name', validators=[InputRequired()])
    image = StringField('Image', validators=[InputRequired()])
    ports = StringField('Port')
    volumes = StringField('Volume')
    env = FieldList(FormField(EnvField))
    restart_policy = StringField('Restart Policy', validators=[InputRequired()])

просмотров. py:

def app_info(app_id):
    app = Template_Content.query.filter_by(id=app_id).first()
    bind_list = []
    volume_list = []

    for volume_dict in app.volumes:
        bind_list.append(volume_dict.get('bind'))
        volume_list.append(volume_dict.get('container'))

    volumes = tuple(zip(bind_list,volume_list))

    form = DeployForm(request.form, ports=app.ports) #Set the form for this page


    if form.validate_on_submit():
        print('valid')
    return render_template('apps/deploy_app.html', form=form, app=app, volumes=volumes)

В настоящее время, если я закомментирую строку «set» в шаблоне jinja, он создает правильное количество форм, но предварительно заполняет их все одними и теми же данными (полными данными turple) . Если я не прокомментирую строку «set» в шаблоне jinja, я получаю следующую ошибку:

    raise TemplateSyntaxError("expected token %r, got %r" %
jinja2.exceptions.TemplateSyntaxError: expected token 'end of statement block', got '

Есть ли для меня лучший способ создать это?

...