Flask App不会加载app.py(提供的文件/路径(app)似乎不存在)

时间:2016-12-30 22:27:50

标签: python mysql flask

我的烧瓶应用正在输出“没有内容”#39;对于for()块,我不知道为什么。

我在app.py中测试了我的查询,这里是app.py

# mysql config
app.config['MYSQL_DATABASE_USER'] = 'user'
app.config['MYSQL_DATABASE_PASSWORD'] = 'mypass'
app.config['MYSQL_DATABASE_DB'] = 'mydbname'
app.config['MYSQL_DATABASE_HOST'] = 'xxx.xxx.xxx.xxx'
mysql = MySQL()
mysql.init_app(app)
c = mysql.connect().cursor()
blogposts = c.execute("SELECT post_title, post_name FROM mydbname.wp_posts WHERE post_status='publish' ORDER BY RAND() LIMIT 3")

@app.route('/', methods=('GET', 'POST'))
def email():
    form = EmailForm()

    if request.method == 'POST':
        if form.validate() == False:
            return 'Please fill in all fields <p><a href="/">Try Again</a></p>'
        else:
            msg = Message("Message from your visitor",
                          sender='contact@site.com',
                          recipients=['contact@site.com'])
            msg.body = """
            From: %s
            """ % (form.email.data)
            mail.send(msg)
            #return "Successfully  sent message!"
            return render_template('email_submit_thankyou.html')
    elif request.method == 'GET':
        return render_template('index.html', blogposts)

这就是我app.py的样子。

以下是index.html中的templates/

    <ul>
        {% for blogpost in blogposts %}
        <li><a href="{{blogpost[1]}}">{{blogpost[0]}}</a></li>
        {% else %}
        <li>no content...</li>
        {% endfor %}
        <div class="clearL"> </div>
    </ul>

我检查了查询,然后返回所需的输出,如:

ID   post_title       post_name
1    a title here     a-title-here
2    a title here2     a-title-here2
3    a title here3     a-title-here3

如果我尝试通过运行export FLASK APP=app.py', then flask run`重启dev服务器,我会收到错误:

Error: The file/path provided (app) does not appear to exist.  Please verify the path is correct.  If app is not on PYTHONPATH, ensure the extension is .py

我还尝试通过export FLASK_APP=app.py然后python -m flask run运行 - 这也会出现同样的错误。

关于如何解决的想法?

2 个答案:

答案 0 :(得分:1)

您的模板中没有任何名为blogposts的内容。您需要使用关键字参数来传递数据:

return render_template('index.html', blogposts=blogposts)

另请注意,您应该在函数内部执行该查询,否则它将仅在进程启动时执行,并且您将始终拥有相同的三个帖子。

答案 1 :(得分:0)

我有同样的问题。我解决了它作为终端的更改目录到包含app.py的文件夹,然后运行

export FLASK_APP=app.py

然后,你应该运行

python -m flask run