将筛选器应用于Django自定义模板标记的结果(如i18n trans)

将筛选器应用于Django自定义模板标记的结果(如i18n trans),django,django-templates,django-i18n,Django,Django Templates,Django I18n,我们有一个Django项目,其中有一个遗留翻译模块,该模块将翻译存储在数据库中,并且不使用Django i18n(gettext) 我们已经编写了自定义模板标记{%db_trans…%},其工作方式类似于Django的默认{%trans…%},但有一个技巧我们无法复制 在本例中,“tree”(英语)翻译为“boom”(荷兰语) 在Django模板中,如果我使用默认的i18n并写入{%trans“tree”%}我将看到结果boom。当我想用它作为标题时,我使用capfirst过滤器,就像这样{%t

我们有一个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
)在翻译前将输入大写。由于
的数据库中没有翻译,
{%db_trans“Tree”| capfirst%}
呈现其默认(未翻译)值

  • 我现在介绍了
    {%filter capfirst%}…{%endfilter%}
    ,如果找不到简单的解决方案,我可能会使用它
  • 我检查了Django源代码,发现
    {%trans…%}
    不是基于
    simple_-tag
    的,并且进行了大量的文本参数解析

我的问题:是否有一个包或代码段允许将如上所示指定的筛选器应用于自定义标记的结果?

如果将模板标记为筛选器,则可以将其与
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 }}

您能否创建另一个名为
db\u trans\u capital
的简单标记,该标记调用相同的翻译函数,然后对结果调用
.title()
?我可能会这么做。或者将其更改为一个筛选器,这样您就可以链接它
{{'tree'|db|u trans | capfirst}}
,这样就可以了。@Brobin如果您将此建议添加为答案,我可以相信您:-)完成了!希望你能做到这一点。