【问题标题】:Pybars does not compile jinja if condition and for loopPybars 不编译 jinja if 条件和 for 循环
【发布时间】:2021-09-08 18:58:44
【问题描述】:

我正在一个项目中使用销售平台。我正在尝试使用 pybars 编译具有 jinja 模板语法的电子邮件。但是 pybars 没有解析 if 条件和 for 循环语法。请指导我解析这两个。

谢谢!

context = {
    "site_name": "site_name",
    "order": {
        "items": [
            "one",
            "two",
            "three",
        ]
    },
}

source = """
    {% if True %}
        <div>
            {{ site_name}}
        </div>
    {% endif %}


    <div>
        {% for line in order.items %}
        <tr>
            {{ line }}
        </tr>
        {% endfor %}
    </div>

    <div>

        <p><small>This email was sent to <a href="mailto:{{site_name}}">{{site_name}}</a>.</p>

    </div>

"""


from pybars import Compiler
compiler = Compiler()


template = compiler.compile(source)
template(context)

我得到的输出如下。

'\n    {% if True %}\n        <div>\n            site_name\n        </div>\n    {% endif %}\n\n\n    <div>\n        {% for line in order.items %}\n        <tr>\n            \n        </tr>\n        {% endfor %}\n    </div>\n\n    <div>\n\n        <p><small>This email was sent to <a href="mailto:site_name">site_name</a>.</p>\n\n    </div>\n\n'

【问题讨论】:

标签: python django jinja2


【解决方案1】:

但是pybars 没有解析 if 条件和 for 循环语法。请指导我解析这两个。

这是有道理的,因为 pybars 不是呈现 Jinja 语法的东西。它处理 pybars 语法。 GitHub repository 列出了该语言的一组特性。

您可以使用 Jinja 模板引擎渲染它:

from jinja2 import Template

Template(source).render(context)

您的模板也应该使用{% for line in order.items<strong>()</strong> %} 以便在方法调用中使用,否则您将遍历一个方法,这将引发错误。

对于给定的模板,如下所示:

    <div>
        site_name
    </div>



<div>
    
    <tr>
        ('items', ['one', 'two', 'three'])
    </tr>
    
</div>

<div>

    <p><small>This email was sent to <a href="mailto:site_name">site_name</a>.</p>

</div>

【讨论】:

    猜你喜欢
    • 2018-05-21
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2015-12-18
    • 2015-08-24
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多