Django trans标签可以包含HTML标签吗?

时间:2015-09-28 19:10:43

标签: html django django-templates django-1.8 django-tagging

Django trans标签可以包含HTML标签吗?例如,我可以{% trans "Hold <em><strong>Ctrl</strong></em>" %}吗?或者我必须改为{% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>"吗?

2 个答案:

答案 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中找到这样的说明。