Django trans标签可以包含HTML标签吗?例如,我可以{% trans "Hold <em><strong>Ctrl</strong></em>" %}
吗?或者我必须改为{% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>"
吗?
答案 0 :(得分:6)
我们可以在trans
模板标记中包含HTML标记吗?
不,我们不应该像您在第一种方法{% trans "Hold <em><strong>Ctrl</strong></em>" %}
中那样在trans
模板标记中包含HTML标记。这是一种错误的方法
来自docs:
{% trans %}
模板标记转换为常量字符串 (用单引号或双引号括起来)或可变内容。在
{% trans %}
内的字符串中混合模板变量是不可能的。 如果您的翻译需要带变量的字符串 (占位符),请改用{% blocktrans %}
。
<title>{% trans "This is the title." %}</title> # example 1
<title>{% trans "myvar" noop %}</title> # example 2
解决方案-1:使用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 %}
答案 1 :(得分:1)
正如Rahul在他的回答中所说,不应该在trans模板标签中包含HTML标签。但是,根据Translating text blocks with Django .. what to do with the HTML?(我刚刚发现),可以将HTML标记放在blocktrans模板标记内。因此,我不必做{% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>"
。我无法在the Django 1.8 docs中找到这样的说明。