首頁  >  問答  >  主體

python - Flask中register_blueprint注册Blueprint的疑问

Flask版本:0.10.1
这个是一个

from flask import Blueprint

bapp = Blueprint('admin', __name__)

@bapp.route('/login')
def login():
    return 'login'

这个是运行的方法

#coding:utf-8
from flask import Flask
from entity import DBUtuis, User
from flask.templating import render_template
from web.controller import admin

app = Flask(__name__)
# 这个地方有疑问,不知道问什么一定要是admin.bapp
# 看到的代码例子上都是直接用模块名称就可以的
app.register_blueprint(admin.bapp, url_prefix='/admin')

#设置调试为true,可以不用重启既可以
app.debug = True

@app.route('/index')
def index():
    return render_template('index.html', name='huangteng')

if __name__ == "__main__":
    app.run()

疑问是必选要:

app.register_blueprint(admin.bapp, url_prefix='/admin'),

否则就报错:

'module' object has no attribute 'name'

问题是看教程上都是直接

app.register_blueprint(admin, url_prefix='/admin')

这样用的,我哪里写错了吗?

PHP中文网PHP中文网2742 天前485

全部回覆(1)我來回復

  • 怪我咯

    怪我咯2017-04-17 18:03:00

    其實這不是 flask 的问题,归根到底还是 python 的import問題。

    題主要理解register_blueprint 這個函數接受的參數是什麼,很明顯,應該是 BluePrint 的對象,那麼如果你將你的:

    app.register_blueprint(admin.bapp, url_prefix='/admin')

    修改成:

    app.register_blueprint(admin, url_prefix='/admin')

    這裡的 admin 是一个模块,而不是 BluePrint 對象,教學上可以直接使用:

    app.register_blueprint(admin, url_prefix='/admin')

    是因為它的 admin 本来就是 Blueprint 對象,如果你這裡要直接傳一個變數的話,應該這麼寫:

    #coding:utf-8
    from flask import Flask
    from entity import DBUtuis, User
    from flask.templating import render_template
    from web.controller.admin import bapp
    
    app = Flask(__name__)
    # 这个地方有疑问,不知道问什么一定要是admin.bapp
    # 看到的代码例子上都是直接用模块名称就可以的
    app.register_blueprint(bapp, url_prefix='/admin')
    
    #设置调试为true,可以不用重启既可以
    app.debug = True
    
    @app.route('/index')
    def index():
        return render_template('index.html', name='huangteng')
    
    if __name__ == "__main__":
        app.run()

    我修改了兩句,分別是:

    from web.controller.admin import bapp
    ...
    app.register_blueprint(bapp, url_prefix='/admin')

    這樣就對了。

    回覆
    0
  • 取消回覆