在终端上显示正确的变量值,但不在HTML模板中显示

时间:2019-02-23 20:50:43

标签: python flask

Similar question不能解决我的问题。

我有一个Flask应用程序,该应用程序从数据库读取并使用DB数据呈现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

form.html的Jinja2片段:

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

浏览器上的输出:

stage1 stage1 stage1 stage2 stage2 stage2 stage2 

谁能帮助我了解我在这里做错了什么,以及如何获取在Python代码中设置的变量的正确值以显示在Flask呈现的HTML模板中?

谢谢。

1 个答案:

答案 0 :(得分:0)

感谢大家的提示,即使我不能共享所有上下文(因为我必须保护专有信息),它们还是有帮助的。我设法通过多个步骤解决了这个问题:

  1. 我重新定义了数据库架构,以便每个文档都有一个带有纯数字值的'_id'键。我删除了“ stage”:“ stage1”这类字段。现在,将根据数据库查询结果在代码中动态计算“阶段”。
  2. 然后,我更改了Flask视图功能,以在传递给HTML模板的结果字典中添加一个“ stage”键(不要混入“ _id”字段):
numQuestions = 0

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

    result[numQuestions] = row
    numQuestions += 1
  1. 最后,在我的Jinja2块中,我意识到我需要对结果作为dict进行操作,因此我将其更改为使用dict.values()方法:
    {% for row in result.values() %}
        {{ row['stage'] }}
    {% endfor %}

现在,我在终端机和浏览器中得到了相同的值。