Freemarker 模板 return 字符串而不是 html 元素
Freemarker Template return String instead of html element
我正在使用 Freemarker 模板创建一个表单。
我使用 <#local> 声明了两个变量,它们将保存锚标记和按钮
<#local rightElement = "<a class='set-right' href='${data.url}'>Forgot your password?</a>">
<#local rightButton = "<input type='button' class='js-show-pass btn-toggle-password btn-link' value='Show'>">
我已经使用这个变量传递给创建我的表单结构的宏。但是当我加载我的页面时,我传递的变量在我的表单页面上打印为字符串。我在我的宏中以 ${rightElement}
和 ${rightButton}
的形式访问它们。但它正在用双引号打印我的锚标记,使其成为字符串。
我尝试了多种方法来消除双引号,但都没有成功。您能否建议在变量中声明锚标记并将其用作 html 元素而不是 String.
的方法
我不确定你所说的 "printing my anchor tag with double quotes, making it as string" 是什么意思,但我的猜测是你打印的 HTML 得到 auto-escaped,所以你确实看到了 HTML 来源(带有 <
-s 和所有)在浏览器中,而不是 link 或按钮。
因此,首先,使用 <#local someName>content</#local>
语法分配值,而不是 <#local someName="content">
:
<#local rightElement><a class='set-right' href='${data.url}'>Forgot your password?</a></#local>
<#local rightButton><input type='button' class='js-show-pass btn-toggle-password btn-link' value='Show'></#local>
这确保 ${data.url}
等被正确转义(假设您确实使用 auto-escaping,并且您应该这样做),那么您也不必 avoid/escape "
或 '
在字符串文字中,您可以使用 #if
等构造值等
然后,如果您使用的是 auto-escaping 的现代版本,那么在打印 HTML 值的地方(尝试 ${.output_format}
看看 - 它应该打印 HTML
然后,而不是 undefined
),您现在可以只写 ${rightElement}
,因为 FreeMarker 知道它已被捕获 HTML,因此不需要再转义。如果您使用的是 auto-escaping 的旧版本(使用 #escape
指令),那么您必须编写 <#noescape>${rightElement}</#noescape>
.
我正在使用 Freemarker 模板创建一个表单。 我使用 <#local> 声明了两个变量,它们将保存锚标记和按钮
<#local rightElement = "<a class='set-right' href='${data.url}'>Forgot your password?</a>">
<#local rightButton = "<input type='button' class='js-show-pass btn-toggle-password btn-link' value='Show'>">
我已经使用这个变量传递给创建我的表单结构的宏。但是当我加载我的页面时,我传递的变量在我的表单页面上打印为字符串。我在我的宏中以 ${rightElement}
和 ${rightButton}
的形式访问它们。但它正在用双引号打印我的锚标记,使其成为字符串。
我尝试了多种方法来消除双引号,但都没有成功。您能否建议在变量中声明锚标记并将其用作 html 元素而不是 String.
的方法我不确定你所说的 "printing my anchor tag with double quotes, making it as string" 是什么意思,但我的猜测是你打印的 HTML 得到 auto-escaped,所以你确实看到了 HTML 来源(带有 <
-s 和所有)在浏览器中,而不是 link 或按钮。
因此,首先,使用 <#local someName>content</#local>
语法分配值,而不是 <#local someName="content">
:
<#local rightElement><a class='set-right' href='${data.url}'>Forgot your password?</a></#local>
<#local rightButton><input type='button' class='js-show-pass btn-toggle-password btn-link' value='Show'></#local>
这确保 ${data.url}
等被正确转义(假设您确实使用 auto-escaping,并且您应该这样做),那么您也不必 avoid/escape "
或 '
在字符串文字中,您可以使用 #if
等构造值等
然后,如果您使用的是 auto-escaping 的现代版本,那么在打印 HTML 值的地方(尝试 ${.output_format}
看看 - 它应该打印 HTML
然后,而不是 undefined
),您现在可以只写 ${rightElement}
,因为 FreeMarker 知道它已被捕获 HTML,因此不需要再转义。如果您使用的是 auto-escaping 的旧版本(使用 #escape
指令),那么您必须编写 <#noescape>${rightElement}</#noescape>
.