Настроить правильное значение переменной на терминале, но не в шаблоне HTML - PullRequest
0 голосов
/ 23 февраля 2019

Аналогичный вопрос , который не решает мою проблему.

У меня есть приложение Flask, которое читает из базы данных и отображает HTML-шаблон, используя данные БД.Я пытаюсь манипулировать значением, полученным из БД, перед отправкой его в шаблон HTML, и это не работает.

Код Python:

@app.route('/pilot', methods=['GET'])
def form_view():
    result = {}
    # query DB and get cursor

    numQuestions = 0
    for row in cursor:
        row.pop('_id', None)        # delete the key and add modified key back
        row['_id'] = row['stage'][-1] # get only last char- eg, "1" from "stage1", "2" from "stage2" and so on
        print(row['_id'])
        result[numQuestions] = row
        numQuestions += 1

    return render_template("form.html", count=numQuestions, result=result, debug=app.debug)

Вывод при запуске на терминалекак и ожидалось:

1
1
1
2
2
2

Jinja2 фрагмент form.html:

{% for row in result[row_num]['scrutiny_stage'] %}
    {{ row['_id'] }}
{% endfor %}

Вывод в браузере:

stage1 stage1 stage1 stage2 stage2 stage2 stage2 

Может кто-нибудь помочь мне понять, что яя делаю что-то не так, и как я могу получить правильное значение переменной, которую я устанавливаю в коде Python для отображения в шаблоне HTML, отображаемом Flask?

Спасибо.

1 Ответ

0 голосов
/ 24 февраля 2019

Спасибо за советы, хотя я не мог поделиться всем контекстом (так как я должен защищать конфиденциальную информацию), они были полезны.Мне удалось решить эту проблему в несколько этапов:

  1. Я переделал свою схему БД, чтобы у каждого документа был ключ "_id" с простым числовым значением.Я опустил поля 'stage': 'stage1'.«Этап» теперь вычисляется динамически в базе кода на основе результатов запроса к БД.
  2. Затем я изменил функцию представления Flask, чтобы добавить ключ «stage» к результирующему dict, передаваемому в шаблон HTML (нетвозиться с полем _id):
numQuestions = 0

for row in cursor:
    for line in row['scrutiny_stage']:
        row['stage'] = line['_id']

    result[numQuestions] = row
    numQuestions += 1
Наконец, в своем блоке Jinja2 я понял, что мне нужно работать с результатом как dict, поэтому я изменил его, чтобы использовать метод dict.values ​​():
    {% for row in result.values() %}
        {{ row['stage'] }}
    {% endfor %}

Теперь я получаю те же значения, что и в терминале, и в браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...