我正在尝试使用Flask-Menu和Flask-Breadcrumbs创建包含导航栏的网站。像这样使用装饰器(Flask-Menu示例):
<script type="text/javascript">
$(document).ready(function(){
$('#username').keyup(function(){
var user = $('#username').val();
$.post('checkusername.php', {username: user}, function(data){
$('#wnguser').html(data);
//DOES NOT WORK
if (data === "username available"){
execute some code
}
});
});
});
</script>
但是,我想使用最终允许更复杂操作的MethodView类。模板摘录:
@app.route('/')
@menu.register_menu(app, '.', 'Home')
def index():
return tmpl_show_menu() #Some view
我的代码抛出{%- for item in current_menu.children -%}
<a href="{{ item.url}}">{{ item.text }}</a>
{%- endfor -%}
BuildError: ('contactsApp.SiteView', {}, None)
如何正确装饰可插拔视图?欢呼声。
答案 0 :(得分:2)
装饰 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)
湾如果您使用Flask 0.8+,则可以指定要在类声明中应用的装饰器列表。
class UserAPI(MethodView):
decorators = [user_required]