这个问题已经在这里有一个答案:
当下面的教程时,它在相同的文件中提出= ASK(应用程序“/ someroute”)和应用程序后,瓶=(名称)@ask装饰工程。如果我希望把这些@ask装饰在自己的文件夹视图文件,使用蓝图不管我怎么努力,我得到“名‘问’没有定义”与装饰
我应该说我是新来的烧瓶中,但现在已经有了一个基础的应用程序的东西像长颈瓶主要有瓶,登录和烧瓶导航能够显示菜单项的工作只是如果允许工作。
我一直在关注许多瓶,问教程,一切工作(到目前为止),但我宁愿在一个单独的views.py视图代码在自己的文件夹和应用蓝图。我使用create_app(CONFIG_NAME)代替应用程式=烧瓶(名称)在许多烧瓶教程建议。我希望这样做,因为我想继续我的主要__init__.py尽可能干净。
我的新奇到瓶中防止我做类似使用Alexa的技能-KIT-SDK换蟒蛇如一些人建议的Gitter(如烧瓶问似乎没有再被维护)在烧瓶中,我还是不要“不懂烧瓶足够摸出为什么问对象在一个单独的views.py不可用
在所有的真相,我只是很想在应用程序的一切/ __ init__.py因为这只是一种爱好应用程序,但我想我的构建应用程序烧瓶许多博客,即作为建议,如果有对此没有明显的修复,然后我将诉诸于工作的方式,但我不禁感慨这是我做了从烧瓶的角度不烧瓶问错了。
这可能是值得补充的是我遇到了一些问题,安装(哽咽PyYAML,所以我下载的软件包,并手动安装的要求,然后运行setup.py(只是在对这个问题产生影响的情况下)
#app/__init__.py
#Pytho 3
from flask_ask import Ask, statement, question, session
....
def create_app(config_name):
app = Flask(__name__, instance_relative_config=True)
app.config.from_object(app_config[config_name])
app.config.from_pyfile('config.py')
Bootstrap(app)
db.init_app(app)
nav.init_app(app)
toolbar.init_app(app)
login_manager.init_app(app)
login_manager.login_message = "You must be logged in to access this page."
login_manager.login_view = "auth.login"
principals = Principal(app)
ask = Ask(app, "/alexa")
ask.init_app(app) #have also done it without this as some of the tutorials don't mention it
from .auth import auth as auth_blueprint
app.register_blueprint(auth_blueprint)
from .home import home as home_blueprint
app.register_blueprint(home_blueprint)
from .alexa import alexa as alexa_blueprint
app.register_blueprint(alexa_blueprint,url_prefix='/alexa')
# This loads fine
@ask.launch
def start_skill():
welcome_message = 'Hello there, would you like the news?'
return question(welcome_message)
如果我删除@ask装饰代码,并把它作为下面....
#app/alexa/views.py
from flask_ask import Ask, statement, question, session
import json
import requests
import time
import unidecode
from . import alexa
@alexa.route('/')
def alexa_route():
return('alexa')
#this doesn't work
@ask.launch # this is on line 33 (as below error)
def start_skill():
welcome_message = 'Hello there, would you like the news?'
return question(welcome_message)
我得到(我用VENV这样的路径是虚拟环境)
文件 “/Users/username/Documents/Personal/Pi/template/lib/python3.7/site-packages/flask/app.py”,线2309,在调用返回self.wsgi_app(ENVIRON,start_response)文件“/用户/username/Documents/Personal/Pi/template/lib/python3.7/site-packages/flask/app.py “线2295,在wsgi_app响应= self.handle_exception(E)文件”/用户/用户名/文件/个人/ PI /模板/ lib中/ python3.7 /站点包/瓶/ app.py “线路1741,在handle_exception再加注(exc_type,exc_value,TB)文件”/用户/用户名/文件/个人/ PI /模板/lib/python3.7/site-packages/flask/_compat.py“35行,在再加注加薪值文件” /Users/username/Documents/Personal/Pi/template/lib/python3.7/site-packages/烧瓶/ app.py”,线2292,在wsgi_app响应= self.full_dispatch_request()文件 “/Users/username/Documents/Personal/Pi/template/lib/python3.7/site-packages/flask/app.py” ,线1815,在full_dispatch_request RV = self.handle_user_exception(E)文件“/Users/username/Documents/Personal/Pi/template/lib/python3.7 /site-packages/flask/app.py “线1718,在再加注handle_user_exception(exc_type,exc_value,TB)文件” /Users/username/Documents/Personal/Pi/template/lib/python3.7/site-packages/烧瓶/ _compat.py”,第35行,在再加注加注值文件‘/Users/username/Documents/Personal/Pi/template/lib/python3.7/site-packages/flask/app.py’,线1813,在full_dispatch_request RV = self.dispatch_request()文件 “/Users/username/Documents/Personal/Pi/template/lib/python3.7/site-packages/flask_debugtoolbar/init.py”,线125,在返回dispatch_request view_func(** req.view_args)文件 “/Users/username/Documents/Personal/Pi/baseapp/app/alexa/views.py”,33行,在alexa_route回报(问)NameError:名字 '问' 没有定义
当使用瓶的应用工厂,你应该create_app之外创建模块的对象:
#my_app/__init__.py
from flask_ask import Ask, statement, question, session
...
ask = Ask()
def create_app(config_name):
app = Flask(...)
...
ask.init_app(app)
然后,当你需要它,你可以导入的对象:
#my_app/alexa/views.py
from my_app import ask
...
@ask.launch
def start_skill():
welcome_message = 'Hello there, would you like the news?'
return question(welcome_message)
当心命名您的应用程序“应用程序”,因为这可能会造成混淆的。我把自由将其更改为“my_app应用”更加清晰。