jinja2-humanize-extension - 如何将这些实现到代码中?

jinja2-humanize-extension - how to implement these into code?

我想在我的 jinja2 flask 应用程序中使用人性化功能,文档中的示例对我来说太模糊了。我用 pip 安装了扩展,并尝试按如下方式实现它们:

我要渲染的是:

<small class="text-muted">Time remaining: {{ ((submission.date_expiration - now)|naturaldelta()) }}</small>

尽管我不断收到错误消息:jinja2.exceptions.TemplateAssertionError: No filter named 'naturaldelta'.

我将 env = Environment(extensions=["jinja2_humanize_extension.HumanizeExtension"]) 添加到我的 init.py 但意识到这没有正确添加扩展。有人有这方面的经验吗?

我猜你是在从 Flask 应用中调用 render_template 时遇到了这个错误。我注意到扩展文档中的 full example 只提到使用 env.from_string.

进行渲染

如何在普通的 Flask 应用程序上注册它?似乎您可以在定义应用程序后设置 app.jinja_options

app = Flask(__name__)
app.jinja_options['extensions'] = ['jinja2_humanize_extension.HumanizeExtension']

我不确定上述方法是否“正确”。我四处寻找有关如何在 Flask 应用程序上注册 Jinja2 环境的文档,但找不到太多。这是我测试这个的方法...

根据 的一些线索,您的 Flask 应用程序应该有一个属性 app.jinja_options,在我的新应用程序的情况下,它是空字典:

>>> app = Flask(__name__)
>>> app.jinja_options
{}

所以我添加扩展名:

>>> app.jinja_options['extensions'] = ['jinja2_humanize_extension.HumanizeExtension']

然后验证:

>>> app.jinja_options
{'extensions': ['jinja2_humanize_extension.HumanizeExtension']}

然后在终端用 Flask 的 render_template_string:

测试
>>> from flask import render_template_string
>>> with app.app_context(): 
...  print( render_template_string('''{{300000|humanize_naturalsize()}}''', asd='abc'))
... 
300.0 kB

当您使用 render_template

作为标准呈现模板时,这应该具有相同的效果