【问题标题】:Flask: Results of the query is not being displayed on the webpage using jinja (user_data)Flask:查询结果未显示在使用 jinja 的网页上(user_data)
【发布时间】:2020-10-16 03:33:30
【问题描述】:

我有一个相当基本的烧瓶设置(使用崇高文本编码)。出于测试目的,我现在尝试运行以下 .py 文件。它包含一个生成数据的查询:user_data。我正在尝试查看该数据的结果。

from datetime import datetime
from flask import Flask, render_template, url_for 
import sqlite3

app = Flask(__name__) 
db_locale='users.db'

def query_comments():
        connie=sqlite3.connect(db_locale)
        c=connie.cursor()
        c.execute("""
        SELECT * FROM comments  

        """)
        user_data=c.fetchall()
        print(user_data) #CHANGE THIS TO return user_data


@app.route('/') 
@app.route('/home')
def home():
    user_data=query_comments() #new variable user_Data that is the result from this query
    return render_template('home.html',user_data=user_data)

if __name__ == '__main__':
    app.run(debug=True)

在使用 IDLE 编辑并运行文件 bigquestions.py 时,出现以下错误:

from flask import Flask, render_template, url_for
ModuleNotFoundError: No module named 'flask'

我通过在正确的 python 版本中打开它来解决这个问题。 IDLE 与 venv 中安装的不同。它现在可以正确打印查询结果。

什么仍然不起作用:

  1. 我是否在某个地方的设置或代码中有错误? user_data 未显示在网页上。

在 home.html 中(在模板中)

<p><b>{{ sampletext }}</b></p>
<p>{{ user_data }}</p>

...但是 user_data 没有显示在网页上。上面的数据示例文本工作正常,所以不是渲染的问题。

我想我只是错过了一个步骤或一些代码,并且不确定是什么。

服务器没有返回错误

【问题讨论】:

  • 也许这个帖子stackoverflow.com/questions/29179631/…可以帮助你
  • 谢谢 - 但它与 IDLE 丢失的编辑无关。这根本不是问题 - 不过我会看看。 :)
  • 我解决了运行(导入部分)-但查询不起作用

标签: database sqlite flask module jinja2


【解决方案1】:

第 1 部分已解决:如上所述。当我在默认为 Python 3.7 且 venv 运行 3.8 的 IDLE 中打开它时,它出现了导入错误。这些文件现在运行良好,但第 2 部分 - 查询 user_data 的结果仍未打印。我会接受任何解释这个/指出错误的答案

第 2 部分:奇怪...我想通了,但不明白为什么它会起作用。我基本上不得不注释掉它上面的另一个函数,它也将参数传递给 home.html 页面。是不是不能有多个传参的函数?

函数 def send_cmets() 被注释掉了。然后一切正常!

带有注释掉函数的代码

from datetime import datetime
from flask import Flask,render_template,url_for

import sqlite3

app = Flask(__name__) 
db_locale='users.db'

"""

@app.route('/home')
def sendcomments():
    sampletext="Responses:" #sending this as a variable to home
    return render_template('home.html',sampletext=sampletext)
"""

@app.route('/') 
@app.route('/home')
def home():
    user_data=query_comments() #new variable user_Data that is the result from this query
    return render_template('home.html',user_data=user_data)


@app.route('/about') 
def about():
    return render_template('about.html')
"""
@app.route('/addcomment')
def addcomment():
    return render_template()
"""


def query_comments():
        connie = sqlite3.connect(db_locale)
        c=connie.cursor()
        c.execute("""
        SELECT * FROM comments  

        """)
        userdata=c.fetchall()
        return userdata


query_comments()

if __name__ == '__main__':
    app.run(debug=True)

【讨论】:

    【解决方案2】:

    试试下面的代码

    [..]
    def query_comments():
        connie = sqlite3.connect(
            db_locale,
            detect_types=sqlite3.PARSE_DECLTYPES
        )
        user_data = connie.execute("""SELECT * FROM comments""").fetchall()
        connie.close()
        return user_data
    
    [..]
    

    参考官方Flask教程主题Define and Access the Database

    githubrepo

    看来你解决了第一部分,但它看起来像是一个不正确的方法。

    您的windows 系统上似乎有两个版本的python,因此您必须设置正确的environment system 以避免python 版本和虚拟环境之间的混合

    【讨论】:

    • 谢谢你 - 我会考虑并赞成。我已经对问题进行了更改以澄清。查询肯定会生成数据。它只是没有显示在网页上。所以在 home.html 页面中使用 user_data 作为 {{ user_data }} 时不会显示/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2014-05-04
    • 2014-08-24
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多