Как избежать повторяющихся ссылок на id внутри операторов if-else Jinja2 - PullRequest
0 голосов
/ 30 ноября 2018

В моем app.py у меня есть контроллер, отображающий некоторую страницу.

На этой странице есть форма с полем, по умолчанию пустым.Пользователь может ввести значение, foo и отправить форму.

Этот запрос POST что-то сделает и вернет, среди прочего, значение foo обратно на ту же страницу.По сути, я просто хочу, чтобы значение было там, как оно было задано пользователем, когда страница перерисовывается после запроса POST.Я думаю, довольно много стандартного.

HTML-файл, который у меня есть что-то вроде:

 <div>
     <label for="foo">Foo:</label>
        {% if foo is defined %}
            <input type="text" class="form-control" id="foo" value={{ foo }} name = "foo">
        {% else %}
            <input type="text" class="form-control" id="foo" name = "foo">
        {% endif %}
 </div>

Мой вопрос состоит из двух частей:

1) Какой лучший способ сделатьвыше?Я полагаю, что может быть какой-то однострочный или в любом случае «более элегантный» способ сделать это.Тем не менее, я новичок в Flask и Jinja2 и пока не могу понять.

2) Pycharm сообщает об ошибке для дублированного ссылочного идентификатора.Если это не исправлено в вопросе 1), как я могу избавиться от этого?

EDIT : я думаю, что я потерял равновесие из-за сообщения PyCharm, когда я впервые попытался поставитьоператор if внутри html-тегов:

enter image description here

1 Ответ

0 голосов
/ 30 ноября 2018

На самом деле это довольно просто, вы просто помещаете оператор if внутри <input>, например, <input type="text" class="form-control" id="foo" {% if foo is defined %} value="{{ foo }}" {% endif %} name = "foo">

Обратите внимание, что вы, вероятно, должны поместить свои {{foo}} в кавычки, если они содержат пробелыи т. д. (например, value=bla bla является недействительным html, value="bla bla" является действительным html).

Еще более чистое решение будет следующим:

<input type="text" class="form-control" id="foo" value="{{ foo or "" }}" name = "foo">

Если foo передается в render template, его значение отображается.В противном случае отображается пустая строка.

...