API của tôi đang được xây dựng để cho phép các nhà phát triển mở rộng chức năng của nó. Kế hoạch của tôi là thực hiện điều này bằng cách cung cấp thư mục "tiện ích mở rộng" để họ có thể thả các Bản thiết kế và chúng sẽ được tải động. Đây là mã tôi đang sử dụng để nhập (được sửa đổi từ số này tutorial)Flask Blueprint AttributeError: đối tượng 'module' không có lỗi 'name' thuộc tính
from flask import Flask
import pkgutil
import sys
app = Flask(__name__)
EXTENSIONS_DIR = "extensions"
modules = pkgutil.iter_modules(path=[EXTENSIONS_DIR])
for loader, mod_name, ispkg in modules:
if mod_name not in sys.modules:
# It imports fine
loaded_mod = __import__(EXTENSIONS_DIR+"."+mod_name+"."+mod_name, fromlist=[mod_name])
# It does not register
app.register_blueprint(loaded_mod)
Đây là bố cục thư mục của dự án của tôi. Thư mục extensions
là nơi các nhà phát triển thả chức năng mở rộng của họ.
/root
/extensions
/extension1
__init__.py
extension1.py
/extension2
__init__.py
extension2.py
simple_example.py
Vấn đề là tôi gặp lỗi này và không chắc chắn nó đang nói gì với tôi.
>python simple_example.py
Traceback (most recent call last):
File "simple_example.py", line 14, in <module>
app.register_blueprint(loaded_mod)
File "C:\Python27\lib\site-packages\flask\app.py", line 62, in wrapper_func
return f(self, *args, **kwargs)
File "C:\Python27\lib\site-packages\flask\app.py", line 880, in register_blueprint
if blueprint.name in self.blueprints:
AttributeError: 'module' object has no attribute 'name'
Một phần mở rộng đơn giản trông như thế này
from flask import Blueprint
extension1 = Blueprint('extension1', __name__)
@extension1.route("/my_route")
def treasure_list():
return "list of objects"
Làm thế nào để giải quyết vấn AttributeError
trong một cách mà cho phép app.register_blueprint
cuộc gọi của tôi để thành công?
Tôi nhận được một lỗi rất giống nhau, ngoại trừ Tôi chỉ cố gắng để nhập khẩu một kế hoạch chi tiết rất cơ bản mà không cần bất kỳ fancyness rằng . –
@DavidCrook: về cơ bản có nghĩa là bạn đang cố gắng đăng ký thứ gì đó không phải là thực tế 'Kế hoạch chi tiết'. Đảm bảo bạn vượt qua đúng đối tượng. –