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

Per*_*pus 2 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'
Run Code Online (Sandbox Code Playgroud)

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

我一步一步地建造了这个,并且双方都很好.开始迁移(功能和路线).移动一些代码后,我开始收到一条错误消息(基本上与上面相同,但不同的行).

故障排除

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

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

from app import app
app.run(host='0.0.0.0', port=8080, debug=False)
Run Code Online (Sandbox Code Playgroud)
#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)
Run Code Online (Sandbox Code Playgroud)
#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"
Run Code Online (Sandbox Code Playgroud)

我没有想法.

Per*_*pus 11

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

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

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

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

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

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