【问题标题】:Accessing global attributes from inside a macro in Jinja2从 Jinja2 的宏内部访问全局属性
【发布时间】:2011-02-17 20:46:00
【问题描述】:

我一直在 Jinja2 中广泛使用宏,发现它们非常干燥;但是有一件事困扰着我:如何从宏访问全局内容?如果我能以某种方式从宏本地访问 url_for(),那就太好了。

【问题讨论】:

  • 这是用于什么平台的? Flask、Django、使用 Jinja2 的自定义框架,还是完全不同的东西?
  • Jinja2 在 Google App Engine 上与 webapp2 结合使用。

标签: python jinja2


【解决方案1】:

您可以在 Jinja 环境中使任何可调用对象可用:

jinja_env = Environment(...)
jinja_env.globals['url_for'] = url_for

例如,在 shell 中输出 u'foobar':

from jinja2 import Environment
env = Environment()
env.globals['foo'] = lambda: "foobar"
env.from_string('{% macro bar() %}{{ foo() }}{% endmacro %}{{ bar() }}').render() 

【讨论】:

  • 是的,我已经处理好环境了,url_for() 可以从 Jinja2 模板访问,但不能从宏中访问。
  • 在我的答案中添加了工作代码以显示我是如何测试它的。我误解了你想要做什么吗?
  • 我发现我的 url_for 实际上是一个上下文元素,当然上下文在宏中是不可用的。需要将 url_for 实际放入环境的全局变量中。谢谢!
  • 我正在尝试访问request,它在宏外部可用,但在内部不可用。知道我该怎么做吗?
  • 如果您正在从文件中“导入”宏,那么这个问题是相关的:stackoverflow.com/questions/46118860/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2015-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多