如何用django_jinja app创建Jinja2自定义过滤器?

ser*_*ach 4 python django customization jinja2

我无法弄清楚如何访问environment.filters.在标准的Jinja2示例中,我可以看到datetimeformat过滤器的示例:

def datetimeformat(value, format='%H:%M / %d-%m-%Y'):
    return value.strftime(format)
Run Code Online (Sandbox Code Playgroud)

然后我们可以添加过滤器:

environment.filters['datetimeformat'] = datetimeformat
Run Code Online (Sandbox Code Playgroud)

但我附加了django_jinja应用程序,现在使用django.shortcuts的一个标准render_to_response方法(Jinja的宏,内置函数工作正常).所以我的观点得到了这样的回应

return render_to_response( html_template, result_dict )
Run Code Online (Sandbox Code Playgroud)

我只包括Jinja2应用程序,不用担心构建自定义Jinja2响应,但我不知道如何访问环境.

使用django_jinja应用程序添加自定义模板过滤器应该更改什么?

以下是该应用程序的说明:https://pypi.python.org/pypi/django-jinja/0.8.

And*_*oos 5

我用过这个......

jinja2.filters.FILTERS['datetimeformat'] = datetimeformat
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


kry*_*o07 5

我意识到这个问题相当老了,但是在四处寻找这个问题的解决方案后,没有找到任何有用的答案,我想在这里django_jinja分享我在文档中的发现。

有两个用例:

  1. 在 Django 项目的settings.py. 当在设置中将 jinja2 指定为模板引擎时,可以完成此操作,TEMPLATES例如。

    TEMPLATES = [
    {
        "BACKEND": "django_jinja.backend.Jinja2",
        "APP_DIRS": True,
        "OPTIONS": {
            "match_extension": ".jinja",
            "filters": {
                "myfilter": "path.to.filters.myfilterfn",
                ...
            }
        }
    }]
    
    Run Code Online (Sandbox Code Playgroud)

    可以从此页面获取更多详细信息,包括指定自定义扩展、上下文处理器等。

  2. 创建可重用的 Django 应用程序时注册应用程序特定的过滤器。django_jinja 再次帮助您将过滤器注册到全局过滤器库,如下所示,

    from django_jinja import library
    @library.filter
    def mylower(name):
    """
    Usage: {{ 'Hello'|mylower() }}
    """
    return name.lower()
    
    Run Code Online (Sandbox Code Playgroud)

    更多详情请点击这里

上面的两个示例均已从django_jinja文档中原样删除。使用 2 当然意味着这django_jinja是您的可重用应用程序的依赖项,但如果像我一样,您对几乎所有 Django 应用程序都使用 Jinja 模板,那么这并不是什么大问题。