Pybars не компилирует jinja if condition и for loop
Я использую платформу saleor в проекте. Я пытаюсь скомпилировать письма, имеющие синтаксис шаблонов jinja, используя pybars. Но 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'
                
Но
pybarsне разбирает условие if и синтаксис цикла for. Пожалуйста, подскажите, как разобрать эти две строчки.
Это имеет смысл, поскольку pybars не является чем-то, что отображает синтаксис Jinja. Он обрабатывает синтаксис pybars. В репозитории GitHub перечислен набор возможностей этого языка.
Вы можете отобразить это с помощью шаблонизатора Jinja с:
from jinja2 import Template
Template(source).render(context)
Ваш шаблон также должен использовать {% for line in order.items() %} так с вызовом метода, иначе вы будете выполнять итерацию над методом, что приведет к ошибке.
Для данного шаблона это будет выглядеть так:
    <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>