装饰瓶可插拔景观大厦

2024-03-28 17:48:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个包含导航栏的站点,使用Flask菜单和flaskbreadcrumbs。修饰符的用法如下(Flask-Menu示例):

@app.route('/')
@menu.register_menu(app, '.', 'Home')
def index():
    return tmpl_show_menu() #Some view

但是,我希望使用MethodView类,它最终将允许更复杂的操作。模板摘录:

^{pr2}$

我的代码抛出BuildError: ('contactsApp.SiteView', {}, None)

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

@menu.register_menu(contactsApp, '.', 'List')
class ListView(MethodView):

    def get(self):
        contacts = Contact.objects.all()
        return render_template('contacts/list.html', contacts=contacts)

@menu.register_menu(contactsApp, '.site', 'Sites')
class SiteView(MethodView):

    def get(self):
        sites = Site.objects.all()
        return render_template('contacts/sites.html', sites=sites)

contactsApp.add_url_rule('/', view_func=ListView.as_view('list'))
contactsApp.add_url_rule('/site/', view_func=SiteView.as_view('sites'))

如何正确装饰可插拔视图?干杯。在


Tags: registerviewappflaskreturndeftemplatesites
1条回答
网友
1楼 · 发布于 2024-03-28 17:48:00

装饰aView有两个选项:

a.您可以手工修饰as_view()的返回值。在

def user_required(f):
    """Checks whether user is logged in or raises error 401."""
    def decorator(*args, **kwargs):
        if not g.user:
            abort(401)
        return f(*args, **kwargs)
    return decorator

view = user_required(UserAPI.as_view('users'))
app.add_url_rule('/users/', view_func=view)

如果您使用flask0.8+,您可以指定要在类声明中应用的装饰器列表。在

^{pr2}$

相关问题 更多 >