Django trans 标签可以包含 HTML 标签吗?例如我可以做{% trans "Hold <em><strong>Ctrl</strong></em>" %}
吗?还是我必须这样做{% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>"
?
2 回答
我们可以在trans
模板标签中包含 HTML 标签吗?
不,我们不应该在trans
模板标签中包含 HTML 标签,就像您在第一种方法中所做的那样{% trans "Hold <em><strong>Ctrl</strong></em>" %}
。这是错误的做法
从文档:
模板标签转换常量字符串(用
{% trans %}
单引号或双引号括起来)或变量内容。不能在
{% trans %}
. 如果您的翻译需要带有变量(占位符)的字符串,请{% blocktrans %}
改用。
<title>{% trans "This is the title." %}</title> # example 1
<title>{% trans "myvar" noop %}</title> # example 2
解决方案一:使用trans
模板标签
除了将 HTML 代码放在trans
标签中之外,您还可以执行以下操作来获得所需的结果(尽管这不是推荐的方法)。
{% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em> # using trans tag
解决方案2:blocktrans
改用标签
更好的选择是使用blocktrans
模板标签而不是trans
标签来包含 HTML 标签。
该
blocktrans
标签允许您使用占位符标记由文字和可变内容组成的复杂句子以进行翻译:
然后你可以这样做:
{% blocktrans %}
Hold <em><strong>Ctrl</strong></em>
{% endblocktrans %}
正如 Rahul 在他的回答中所说,不应在 trans 模板标签中包含 HTML 标签。但是,根据使用 Django 翻译文本块 .. 如何处理 HTML?(我刚刚发现),可以将 HTML 标签放在 blocktrans 模板标签中。因此我不必这样做{% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>"
。我无法在Django 1.8 文档中找到这样的说明。