"RuntimeError: working outside of application context" for config module
"RuntimeError: working outside of application context" for config module
我有一个从主文件调用的 config.py 模块,它有多种 app.configs 用于 jinja2filters 和我正在使用的一些其他插件:
config.py 的摘录:
from flask import current_app as app
#imports go here
def function1:
print("hello")
app.config['PROPERTY_1'] = 'configgoeshere'
#jinja2 functions and configs would go here like
app.jinja_env.filters['datetime'] = datetimeformat
来自 index.py 的电话:
from flask import Flask, flash, render_template, jsonify, request, json, request, redirect, url_for, Response, send_from_directory
app = Flask(__name__)
app.config['DEBUG'] = False
app.config.from_object('config') #config file
############################################################################################################################
# MAIN ROUTES
############################################################################################################################
# The route for the homepage
@app.route('/')
def index():
returns错误:
RuntimeError: working outside of application context
更新
我现在正在尝试传递应用程序上下文,这里是 index.py:
from flask import Flask, flash, render_template, jsonify, request, json, request, redirect, url_for, Response, send_from_directory
import time, datetime, os, urllib, urllib2, urlparse, requests, json, string
from urllib2 import Request, urlopen, URLError, HTTPError, urlparse
app = Flask(__name__)
app.config['DEBUG'] = False
app.config.from_object('config')
############################################################################################################################
# MAIN ROUTES
############################################################################################################################
# The route for the homepage
@app.route('/')
def index():
这是更新后的摘录 config.py:
from index import app
#imports go here
def function1:
print("hello")
app.config['PROPERTY_1'] = 'configgoeshere'
#jinja2 functions and configs would go here like
app.jinja_env.filters['datetime'] = datetimeformat
返回的错误是:
$ python index.py
Traceback (most recent call last):
File "index.py", line 8, in <module>
app.config.from_object('config')
File "C:\Python27\lib\site-packages\flask\config.py", line 162, in from_object
obj = import_string(obj)
File "C:\Python27\lib\site-packages\werkzeug\utils.py", line 418, in import_string
__import__(import_name)
File "C:\Users\****\Desktop\*****\config.py", line 1, in <module>
from index import app
File "C:\Users\***\Desktop\*****\index.py", line 17, in <module>
@app.route('/')
File "C:\Python27\lib\site-packages\werkzeug\local.py", line 343, in __getattr__
return getattr(self._get_current_object(), name)
File "C:\Python27\lib\site-packages\werkzeug\local.py", line 302, in _get_current_object
return self.__local()
File "C:\Python27\lib\site-packages\flask\globals.py", line 34, in _find_app
raise RuntimeError('working outside of application context')
RuntimeError: working outside of application context
注意 - config.py 中的第 162 行没有代码,就像错误提示的那样
查看 Flask 对 Application Contexts 的解释。
在您的 config.py
文件中,from flask import current_app as app
使得对 app.config['PROPERTY_1'] = 'configgoeshere'
的调用实际上尝试在 current_app
上设置配置,尽管没有应用程序上下文默认情况下,直到收到请求(因此出现错误)。由于该调用不在函数内,因此它会在其他任何事情(如请求)发生之前立即执行。
我建议在索引中的 app
实例上进行配置,而不是在 current_app
.
上进行配置
我最终使用的正是 karin 描述的内容。
index.py
from __future__ import print_function # For printing output to CMD
import sys
from flask import Flask, flash, render_template, jsonify, request, json, request, redirect, url_for, Response, send_from_directory
import os, urllib, urllib2, urlparse, requests, json, string
from urllib2 import Request, urlopen, URLError, HTTPError, urlparse
app = Flask(__name__)
from config import *
// ... rest of code for main file (like routes and stuff) below
config.py
from flask import Flask, current_app
app = Flask(__name__)
with app.app_context():
// code goes here ...
// in this case, I'm configuring various services like API's and jinja2
我有一个从主文件调用的 config.py 模块,它有多种 app.configs 用于 jinja2filters 和我正在使用的一些其他插件:
config.py 的摘录:
from flask import current_app as app
#imports go here
def function1:
print("hello")
app.config['PROPERTY_1'] = 'configgoeshere'
#jinja2 functions and configs would go here like
app.jinja_env.filters['datetime'] = datetimeformat
来自 index.py 的电话:
from flask import Flask, flash, render_template, jsonify, request, json, request, redirect, url_for, Response, send_from_directory
app = Flask(__name__)
app.config['DEBUG'] = False
app.config.from_object('config') #config file
############################################################################################################################
# MAIN ROUTES
############################################################################################################################
# The route for the homepage
@app.route('/')
def index():
returns错误:
RuntimeError: working outside of application context
更新 我现在正在尝试传递应用程序上下文,这里是 index.py:
from flask import Flask, flash, render_template, jsonify, request, json, request, redirect, url_for, Response, send_from_directory
import time, datetime, os, urllib, urllib2, urlparse, requests, json, string
from urllib2 import Request, urlopen, URLError, HTTPError, urlparse
app = Flask(__name__)
app.config['DEBUG'] = False
app.config.from_object('config')
############################################################################################################################
# MAIN ROUTES
############################################################################################################################
# The route for the homepage
@app.route('/')
def index():
这是更新后的摘录 config.py:
from index import app
#imports go here
def function1:
print("hello")
app.config['PROPERTY_1'] = 'configgoeshere'
#jinja2 functions and configs would go here like
app.jinja_env.filters['datetime'] = datetimeformat
返回的错误是:
$ python index.py
Traceback (most recent call last):
File "index.py", line 8, in <module>
app.config.from_object('config')
File "C:\Python27\lib\site-packages\flask\config.py", line 162, in from_object
obj = import_string(obj)
File "C:\Python27\lib\site-packages\werkzeug\utils.py", line 418, in import_string
__import__(import_name)
File "C:\Users\****\Desktop\*****\config.py", line 1, in <module>
from index import app
File "C:\Users\***\Desktop\*****\index.py", line 17, in <module>
@app.route('/')
File "C:\Python27\lib\site-packages\werkzeug\local.py", line 343, in __getattr__
return getattr(self._get_current_object(), name)
File "C:\Python27\lib\site-packages\werkzeug\local.py", line 302, in _get_current_object
return self.__local()
File "C:\Python27\lib\site-packages\flask\globals.py", line 34, in _find_app
raise RuntimeError('working outside of application context')
RuntimeError: working outside of application context
注意 - config.py 中的第 162 行没有代码,就像错误提示的那样
查看 Flask 对 Application Contexts 的解释。
在您的 config.py
文件中,from flask import current_app as app
使得对 app.config['PROPERTY_1'] = 'configgoeshere'
的调用实际上尝试在 current_app
上设置配置,尽管没有应用程序上下文默认情况下,直到收到请求(因此出现错误)。由于该调用不在函数内,因此它会在其他任何事情(如请求)发生之前立即执行。
我建议在索引中的 app
实例上进行配置,而不是在 current_app
.
我最终使用的正是 karin 描述的内容。
index.py
from __future__ import print_function # For printing output to CMD
import sys
from flask import Flask, flash, render_template, jsonify, request, json, request, redirect, url_for, Response, send_from_directory
import os, urllib, urllib2, urlparse, requests, json, string
from urllib2 import Request, urlopen, URLError, HTTPError, urlparse
app = Flask(__name__)
from config import *
// ... rest of code for main file (like routes and stuff) below
config.py
from flask import Flask, current_app
app = Flask(__name__)
with app.app_context():
// code goes here ...
// in this case, I'm configuring various services like API's and jinja2