В нашей компании нам нравится писать приложения на основе django, и мы также любим использовать реагировать. Недавно мы подумали о написании шаблонного движка на основе компонентов для python, где шаблоны могут быть написаны как реагирующие компоненты с использованием JSX.
В идеале должна быть возможность встроить JSX в код Python, чтобы вы могли писать такие компоненты:
В header.pyx
:
import PyReact
from my_awsome_project.components import Logo, Link
def Header(context):
page_title = context.get('page_title')
links = context.get('links')
return (
<div>
<Logo />
{page_title}
<ul>
{[<Link href={link.url}>{link.title}</Link> for link in links]}
</ul>
</div>
)
Это, конечно, потребует сначала перенести файл, чтобы получить правильный код Python. Это может привести к чему-то похожему:
import PyReact
from my_awsome_project.components import Logo, Link
def Header(context):
page_title = context.get('page_title')
links = context.get('links')
return (
PyReact.createComponent('div', context, [
PyReact.createComponent(Logo),
page_title,
PyReact.createComponent('ul', context, [
[
PyReact.createComponent(Link, {'href': link.url}, link.title)
for link in links
]
]),
])
)
Вопрос: как бы я подошел к написанию такого транспилятора?
Также мы подумали, что вместо встраивания JSX напрямую в код Python мы можем вернуть строку, содержащую JSX, которая анализируется независимо. Это был бы лучший / более легкий подход?