Django trans标记可以包括HTML标记吗?

Django trans标记可以包括HTML标记吗?,html,django,django-templates,django-1.8,django-tagging,Html,Django,Django Templates,Django 1.8,Django Tagging,Django trans标记可以包括HTML标记吗?例如,我可以执行{%trans”按住Ctrl“%}?或者我必须执行{%trans“Hold”%}{%trans“Ctrl”%}“而不是?我们可以在trans模板标记中包含HTML标记吗? 不,我们不应该像您在第一种方法中那样在模板标记中包含HTML标记{%trans“HoldCtrl“%}。这是一种错误的方法 从 {%trans%}模板标记转换常量字符串或 (用单引号或双引号括起来)或可变内容 如果您的翻译需要带变量的字符串,则无法在{%tra

Django trans标记可以包括HTML标记吗?例如,我可以执行
{%trans”按住Ctrl“%}
?或者我必须执行
{%trans“Hold”%}{%trans“Ctrl”%}
而不是?

我们可以在
trans
模板标记中包含HTML标记吗?

不,我们不应该像您在第一种方法中那样在模板标记中包含HTML标记
{%trans“HoldCtrl“%}
。这是一种错误的方法

{%trans%}
模板标记转换常量字符串或 (用单引号或双引号括起来)或可变内容

如果您的翻译需要带变量的字符串,则无法在
{%trans%}
中的字符串中混合模板变量 (占位符),改用
{%blocktrans%}

解决方案2:改用标签

更好的选择是使用
blocktrans
模板标记而不是
trans
标记来包含HTML标记

blocktrans
标记允许您标记由以下内容组成的复杂句子: 利用文本和可变内容进行翻译 占位符:

然后,您可以执行以下操作:

{% blocktrans %}
Hold <em><strong>Ctrl</strong></em>
{% endblocktrans %}
{%blocktrans%}
按住Ctrl键
{%endblocktrans%}

正如Rahul在回答中所说,不应该在trans-template标记中包含HTML标记。但是,根据(我刚刚发现的),可以将HTML标记放在blocktrans-template标记中。因此,我不必执行
{%trans“Hold”%%}{%trans Ctrl”}
。我在中找不到这样的说明。

这似乎不符合干燥原则。在某种程度上,你可以说。在我的情况下有相当多。@RahulGupta我对此感到困惑。混合变量和字符串的能力与包含HTML标记(只是常量字符串)有什么关系?也就是说,您应该能够很好地包含它们,但您需要确保它们被正确翻译(即在大多数情况下不被翻译);)解决方案一并不是真正正确的,如果单词是句子的一部分,独立地翻译它们是没有意义的。例如:有些语言需要它们反过来(“Ctrl”然后“Hold”)。是的,我们不能在
trans
模板标记中使用HTML标记,但我们可以使用
blocktrans
标记。使用
trans
模板的解决方案不是最佳解决方案。对于我们的案例,我们可以使用
blocktrans
模板标记。我已经更新了ans,请检查。
{% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em> # using trans tag
{% blocktrans %}
Hold <em><strong>Ctrl</strong></em>
{% endblocktrans %}