我正在尝试在烧瓶环境中实现我的 coursera python 项目。我还使用https://github.com/miguelgrinberg/flasky(分支 7a)来了解蓝图是如何工作的。现在,我定义了 2 个蓝图:main_blueprint 和 rpsls_blueprint。运行应用程序后出现以下错误:
Traceback (most recent call last):
File "manage.py", line 8, in <module>
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
File "..../app/__init__.py", line 29, in create_app
app.register_blueprint(rpsls_blueprint)
File "/Library/Python/2.7/site-packages/flask/app.py", line 62, in wrapper_func
return f(self, *args, **kwargs)
File "/Library/Python/2.7/site-packages/flask/app.py", line 880, in register_blueprint
if blueprint.name in self.blueprints:
AttributeError: 'module' object has no attribute 'name'
Exception AttributeError: "'NoneType' object has no attribute 'path'" in <function _remove at 0x10c49a668> ignored
有人知道问题出在哪里吗?这是我app/__init__.py
文件的相关部分:
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
bootstrap.init_app(app)
mail.init_app(app)
moment.init_app(app)
db.init_app(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
from .rpsls import rpsls as rpsls_blueprint
app.register_blueprint(rpsls_blueprint)
return app
这是我的 app/rpsls/rpsls.py 文件:
import random
class RpslsGame():
def __init__(self):
pass
def name_to_number(self, name):
if name == "rock":
return 0
elif name == "Spock":
return 1
elif name == "paper":
return 2
elif name == "lizard":
return 3
elif name == "scissors":
return 4
else:
return name + " does not match any\
of the five correct input strings"
def number_to_name(self, number):
if number == 0:
return "rock"
elif number == 1:
return "Spock"
elif number == 2:
return "paper"
elif number == 3:
return "lizard"
elif number == 4:
return "scissors"
else:
return str(number) + \
" is not in the correct range"
def rpslsMethod(self, player_choice):
result = ""
result += "Player chooses " + str(player_choice) + "\n"
player_number = self.name_to_number(player_choice)
comp_number = random.randrange(0, 5)
comp_choice = self.number_to_name(comp_number)
result += "Computer chooses " + comp_choice + "\n"
differene = (comp_number - player_number) % 5
if (differene == 1 or differene == 2):
result += "Computer wins\n"
elif (differene == 3 or differene == 4):
result += "Player wins\n"
elif (differene == 0):
result += "Try again, It's a tie\n"
return result
我的 app/rpsls/ init .py 文件:
from flask import Blueprint
rpsls = Blueprint('rpsls', __name__)
from . import views