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>