【发布时间】:2010-12-11 02:32:12
【问题描述】:
我正在使用 freemarker 生成一个 freemarker 模板。但我需要一些方法来逃避 freemarker 标签。
如何转义<#list> 标签或${expression}?
【问题讨论】:
标签: freemarker
我正在使用 freemarker 生成一个 freemarker 模板。但我需要一些方法来逃避 freemarker 标签。
如何转义<#list> 标签或${expression}?
【问题讨论】:
标签: freemarker
如果您发现 {} 嵌套令人困惑,您也可以使用:${"$"}{expression}。
【讨论】:
\$ - 但没有。这是优雅的足够近似......
我正在使用alternative syntax 功能。我以 [#ftl] 开始模板并使用此语法。
对于表达式,我使用字符串文字功能:${r"${expression}"}
【讨论】:
您可以将 FreeMarker 配置为使用 [=exp] 而不是 ${exp}(自 2.3.28 起),以及 [#...]/[@...] 而不是 <#...>|<@...>,方法是同时设置 interpolation_syntax 和tag_syntax 配置设置为 square_bracket(在 Java API 中:Configuration cfg; ... cfg.setInterpolationSyntax(Configuration.SQUARE_BRACKET_INTERPOLATION_SYNTAX) 和 cfg.setTagSyntax(Configuration.SQUARE_BRACKET_TAG_SYNTAX))。然后语法不会与默认语法冲突。
有一个棘手的案例;如果模板以<#ftl> 开头,那么它会将标签语法切换回angle_bracket。为了解决这个问题,只需在其前面添加 [#ftl] 行。
另请参阅:https://freemarker.apache.org/docs/dgui_misc_alternativesyntax.html
【讨论】:
如果您想使用非原始字符串来转义双引号、撇号等,您可以执行以下操作:
假设您想在字符串中使用字符串 ${Hello}-"My friend's friend"。你不能用原始字符串做到这一点。我使用的是:
${"\x0024{Hello}-\"My friend's friend\""}
自从我使用双引号以来,我没有转义撇号。
【讨论】: