【问题标题】:Python: Unable to access macro in JinjaPython:无法访问 Jinja 中的宏
【发布时间】:2013-06-07 17:39:45
【问题描述】:

我正在尝试在 jinja 文件中使用宏。这是我的代码:

{{ display(class = "hello") }}

{% macro display(class) %}
    this is a macro
{% endmacro %}

这很简单,根据我在所有示例中看到的情况,它应该可以工作。但是,当我去运行程序时,出现了这个错误:

第 123 行,顶级模板代码 {{ display(class= "hello") }}

有什么想法吗?

编辑:我最初在标题中使用了 yaml 而不是 jinja。我很抱歉。

【问题讨论】:

  • 请告诉我们解析 yaml 文件的代码。
  • 查看yaml.org/spec/1.2/spec.html,我找不到任何关于宏的信息。你确定它们存在于 YAML 中吗?
  • UUUGGHH,对不起,伙计们,我本来打算用 Jinja 写的。同一个文件同时使用了两者,而我刚刚在处理 yaml。感谢@ColonelPanic 指出这一点。
  • 这是整个错误信息吗?没有更多的追溯?

标签: python parsing macros jinja2


【解决方案1】:

必须先定义或导入宏,然后才能使用它

Jinja site 上的例子显示:

{% macro input(name, value='', type='text', size=20) -%}
    <input type="{{ type }}" name="{{ name }}" value="{{
        value|e }}" size="{{ size }}">
{%- endmacro %}

定义后这样调用:

<p>{{ input('username') }}</p>
<p>{{ input('password', type='password') }}</p>

【讨论】:

  • 应该没关系;据我所知,那些只是控制是否打印换行符。 (见jinja.pocoo.org/docs/templates/#whitespace-control
  • 是的,我试过使用-%} 他们只是删除空格。
  • @Josh 我已对答案进行了更改。
  • 哇。是的,宏必须在使用前定义。谢谢@ColonelPanic 这么简单的错误。有点尴尬。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2021-12-29
  • 2017-03-16
相关资源
最近更新 更多