2016-04-22 16 views
3

我在app/settings/__init__.py中定義藍圖,然後導入視圖以註冊它們。這會引起AttributeError: 'function' object has no attribute 'route'。爲什麼我得到這個錯誤,我該如何解決?在藍圖上註冊路線引發AttributeError:'function'對象沒有屬性'route'

from flask import Blueprint 

settings = Blueprint('settings', __name__, template_folder='templates') 

from app.settings import views 
Traceback (most recent call last): 
    File "E:/surfmi/run.py", line 1, in <module> 
    from app import app 
    File "E:\surfmi\app\__init__.py", line 34, in <module> 
    from app.settings import settings 
    File "E:\surfmi\app\settings\__init__.py", line 6, in <module> 
    from app.settings import views 
    File "E:\surfmi\app\settings\views.py", line 17, in <module> 
    @settings.route('/general') 
AttributeError: 'function' object has no attribute 'route' 

回答

6

你的看法模塊有一個名爲「設置」視圖功能,陰影名爲「設置」進口藍圖一旦執行到它。

from app.settings import settings 

# the name settings refers to the blueprint imported above 
@settings.route('/a') 
def this_works(): 
    ... 

# the name settings refers to the blueprint imported above 
@settings.route('/') 
def settings(): 
    ... 

# the name settings now refers to the function defined above 
@settings.route('/b') 
def this_fails(): 
    ... 

別名導入使用不會與您的視圖函數名稱相沖突的名稱。

from app.settings import settings as bp 

@bp.route('/') 
def settings(): 
    pass 
1

對我來說,這發生在路由名稱和函數名稱相同時。這似乎是Flask中的一個bug。

@ train.route( '/火車',方法= [ 'GET']) DEF列車(): 通

我改變這對:

@ train.route('/ train',methods = ['GET']) def something_else():

然後Flask很高興。

+0

@train和def train()在本模塊的命名空間中發生衝突。他們都是'火車' –