0

我从 python 开始,所以我可以犯错误我喜欢用于 Python 的框架 Sanic,我需要一个模板引擎,我更喜欢使用 Jinja2。

我发现了 Sanic 的两个扩展: 1. https://github.com/yunstanford/jinja2-sanic 2. https://github.com/lixxu/sanic-jinja2

在 Jinja2 文档中,我看到 Jinja 可以使用 Environnement 对象上的特定选项“enable_async=True”异步工作,然后使用“render_async()”。因此,可以在异步模式下使用本机 Jinja。

第一个问题:为什么要使用扩展?Jinja 的语法很简单。

第二个问题:我检查了扩展的代码,但在 Jinja 的特殊语法 async 中没有找到参考。我不是 sur 但我相信扩展在同步模式下使用 Jinga。如果是真的,为什么?

第三个问题:我检查了Jinja2的代码,模板文件似乎正常读取,而不是异步方法(如aiofiles)。所以,我不明白异步模式在哪里......

谢谢你的帮助

4

1 回答 1

-1

异步支持 从 2.9 版开始,Jinja2 还支持 Python 的 async 和 await 结构。就模板设计人员而言,这个特性对他们来说是完全不透明的,但是作为开发人员,你应该知道它是如何实现的,因为它会影响你可以安全地暴露给模板环境的 API 类型。

就像其他人评论的那样,您可以将阻塞代码包装在异步等待语法中。从 jinja2 导入模板 impoty asyncio

async def generate_jinja_template():
    t = Template("Hello {{ something }}!") 
    t.render(something="World")
    return t

event_loop = asyncio.get_event_loop()
try:
    event_loop.run_until_complete(
        generate_jinja_template()
    )
finally:
    event_loop.close()
于 2018-07-24T12:50:43.193 回答