Flask中的蓝图"属性'功能'对象没有属性' name'

时间:2016-08-07 02:01:29

标签: python flask

问题说明

尝试启动Flask时收到错误消息。

Traceback (most recent call last):
  File "./run.py", line 3, in <module>
    from app import app
  File "/home/xxxxxx/xxxx.xxxxxxx.com/ClientTracker/app/__init__.py", line 13, in <module>
    app.register_blueprint(admin)
  File "/home/xxxxx/xxxxx.xxxxxxx.com/ClientTracker/env/local/lib/python2.7/site-packages/flask/app.py", line 65, in wrapper_func
    return f(self, *args, **kwargs)
  File "/home/xxxxx/xxxxx.xxxxxxx.com/ClientTracker/env/local/lib/python2.7/site-packages/flask/app.py", line 958, in register_blueprint
    if blueprint.name in self.blueprints:
AttributeError: 'function' object has no attribute 'name'

这是从实现蓝图的更简单的层次结构迁移。我正在拆分前端和管理面板的功能。

我逐步建立了这个,并且让双方都正常工作。 开始迁移(功能和路线)。移动一些代码后,我开始收到一条错误消息(基本上与上面相同,但不同的行)。

疑难解答

  • 通过stackO上的相关帖子搜索
  • 最初它抱怨我的第二条路线声明。一世 开始删除代码(回滚)到我认为是已知的 良好的状态。但是我仍然有问题。
  • 我把它归结为我认为我需要的最小代码但仍然可以使用 错误。
  • 如果我删除了 init .py文件中的注册,则前端可以正常工作 完美。

代码

#ClientTracker/run.py
#!env/bin/python

from app import app
app.run(host='0.0.0.0', port=8080, debug=False)
#ClientTracker/app/__init__.py

# Import flask and template operators
from flask import Flask, render_template

# Define the WSGI application object
app = Flask(__name__)

# Import a module / component using its blueprint handler variable (mod_auth)
#from app.mod_auth.controllers import mod_auth as auth_module
from app.admin.views import admin
from app.client.views import client

# Register blueprint(s)
app.register_blueprint(admin)
app.register_blueprint(client)
#ClientTracker/app/admin/views.py
from flask import render_template, request, Blueprint
from app import app
import MySQLdb
import datetime

admin = Blueprint(
    'admin',
    __name__,
    url_prefix='/admin',
    template_folder='templates',
    static_folder='static'
)

@admin.route('/')
def admin():
    return "ok"

我没有想法。

1 个答案:

答案 0 :(得分:9)

好吧,好像似乎发生了,我花了一个小时看,另外15分钟写了一个问题,然后在我发帖后,我找到了答案。

我找到了一个有答案的帖子(https://github.com/pallets/flask/issues/1327)。

基本上,您不能拥有与蓝图名称同名的功能名称。现在似乎显而易见,但肯定让我感到困惑了一段时间。

在考虑它时,我原来的“工作”状态有一个虚函数名称,用于'/'。当我回滚时,我没有回滚得足够远。

替换def admin():使用def admin1():(将在prod中更好地解决这个问题)并且一切正常。

我希望这篇文章可以帮助别人。请随时发表评论。与往常一样,该团队总是比个人更聪明。最后,感谢您阅读这篇文章。 : - )