将过滤器应用于 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
。
- 我现在
{% 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 }}
我们有一个 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
。
- 我现在
{% 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 }}