在Flask中,我想了解如何创建行为类似于current_user
在任何地方(控制器和视图)都可以使用的函数,但是我一直在努力地实际知道要寻找什么才能找到答案。
我能找到的最接近SO的帖子是这篇文章,但这是针对Ruby而不是Python的,有人可以向我指出正确的方向吗?谢谢!
到目前为止,我有:
在我__main__.py
我有这个:
@app.context_processor
def foo_processor():
def foo():
return 'Hello World'
这样的结果是,我可以访问{{ foo }}
Jinja模板,而不必从控制器发送过来。不幸的是,我无法访问foowithin
我的控制器,这也是我希望能够做到的。我需要以某种方式导入它吗?
如果我正确理解这一点,则需要一个可以在模板和控制器中使用的变量,而不必每次都将其传递到模板中。为此,首先,创建一个函数以获取变量。这可能类似于获取用户的设置。然后在上下文处理器中,传递此函数的结果。要在控制器中也访问它,请创建一个其他变量,该变量保存getter的值。请注意,如果函数返回不同的值,则可能需要调用函数而不是使用变量。
# create a getter function, this returns the property's value.
def get_property():
return "Test Text"
property = get_property() # this is only to make code pretty later on.
# the context processor passes the property to the templates.
@app.context_processor
def property_processor():
return dict(property=get_property())
在控制器中,您可以访问之前创建的变量。
def view():
if property == true:
return redirect(url_for('index'))
else:
return redirect(url_for('access_denied'))
请注意,如果您的值将更改,则可能需要改用该函数,并在每次渲染视图时重新调用getter。这将使第一个if
语句变为if get_property() == true:
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句