将过滤器应用于 Django 自定义模板标签的结果(如 i18n trans)

Apply filter to result of Django custom template tag (like i18n trans)

我们有一个 Django 项目,它有一个遗留翻译模块,将翻译存储在数据库中,并且不使用 Django i18n (gettext)。

我们编写了自定义模板标签 {% db_trans ... %},其工作方式类似于 Django 的默认标签 {% trans ... %},但有一个技巧我们无法复制。

在此示例中,"tree"(英语)转换为 "boom"(荷兰语)。

在我的 Django 模板中,如果我使用默认 i18n 并写入 {% trans "tree" %},我将看到结果 boom。当我想用这个作为标题时,我使用 capfirst 过滤器,像这样 {% trans "tree"|capfirst %},结果将是 Boom。注意大写 B.

这似乎是一个特殊的技巧。我们的 db_trans 自定义标签(基于 simple_tag)在翻译前将输入大写。由于数据库中没有 Tree 的翻译,{% db_trans "tree"|capfirst %} 呈现其默认(未翻译)值 Tree

我的问题:是否有一个程序包或片段允许将如上所示指定的过滤器应用于自定义标签的 结果

如果您将模板标记设为过滤器,则可以将其与 capfirst 内置过滤器

链接起来
from django import template

register = template.Library()

@register.filter
def db_trans(word, request):
    return do_the_translation(word, request)

然后在 html 中看起来像这样

{{ 'tree'|db_trans:request|capfirst }}