我正在使用用于python flask web服务器的flask-breadcrumbs附加组件, 但我认为这是python装饰的更普遍的问题,
@app.route('/dashboard')
@register_breadcrumb(app, '.', parameter)
def render_dashboard_page():
...
是否可以设置"参数"来自函数" render_dashboard_page"? 我需要根据" Accept-language"来选择参数。请求的标志,只有在方法被触发后才能确定。
顺便说一下," @ register_breadcrumb"的第3个输入是breadcrumb项目标题,我希望它基于" Accept-language"标志。
有关加载项的更多信息:http://flask-breadcrumbs.readthedocs.io/en/latest/
谢谢:)
答案 0 :(得分:1)
不可能从函数内部向函数的decorator传递参数,因为装饰器在定义函数之前执行。关于装饰器如何工作的指南可以找到here和here - 本质上,装饰器是一个传递它下面的函数的函数,然后返回一个应该插入到命名空间中的函数。 / p>
更容易举个例子:
>>> def add_one(fn):
... print("add_one called")
... def wrap(n):
... print("wrap called")
... return fn(n) + 1
... return wrap
>>> @add_one
... def times_by_two(n):
... print("times_by_two called")
... return n * 2
add_one called
>>> times_by_two(21)
wrap called
times_by_two called
43
我不完全确定Flask插件的工作原理,但您可以使用variable rules功能来执行您想要的操作。看起来您可以定义一个要调用的函数,该函数返回文本和面包屑的最后一个组件的URL,并且可以从该函数访问request
对象;希望这足以确定用户的语言。