我正在尝试使用 Flask-Menu 和 Flask-Breadcrumbs 创建一个包含导航栏的网站。装饰器的使用方式如下(Flask-Menu示例):
@app.route('/')
@menu.register_menu(app, '.', 'Home')
def index():
return tmpl_show_menu() #Some view
Run Code Online (Sandbox Code Playgroud)
但是,我想使用 MethodView 类,它最终将允许进行更复杂的操作。模板摘录:
{%- for item in current_menu.children -%}
<a href="{{ item.url}}">{{ item.text }}</a>
{%- endfor -%}
Run Code Online (Sandbox Code Playgroud)
我的代码抛出 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'))
Run Code Online (Sandbox Code Playgroud)
如何正确装饰可插入视图?干杯。
装饰View有两种选择:
一种。您可以手动修饰 的返回值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)
Run Code Online (Sandbox Code Playgroud)
湾 如果您使用 Flask 0.8+,您可以指定要在类声明中应用的装饰器列表。
class UserAPI(MethodView):
decorators = [user_required]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
855 次 |
| 最近记录: |