template-engine 相关问题

模板引擎是用于处理模板和内容信息以生成输出文档的软件。

获取外循环的循环索引

在jinja中,变量loop.index保存当前运行循环的迭代次数。 当我有嵌套循环时,如何在内循环中获取外循环的当前迭代?

回答 3 投票 0

如何在c#上自定义word模板以生成文档

我有一个.docx格式的word模板, 我的问题: 我可以从富文本内容控件中获取标签名称列表吗 我已经在模板中声明了内部表格和其他内容吗?还有...

回答 1 投票 0

使用 VS 2015 构建时生成 T4 时出错

我正在使用 Visual Studio 2015 update 3。我尝试使用带有 dp 标志的 TextTransform.exe,但出现此错误: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\

回答 1 投票 0

如何使用 Thymeleaf 转义属性键中的冒号

我想使用 Thymeleaf 在 .xml 文件中生成以下条目 为此,我有以下模板: <

回答 1 投票 0

模板引擎样式渲染不起作用

CSS 未渲染: CSS 在单级路径中渲染,如 /、/user 等... CSS 不在 /admin/add-user 内渲染。 我的文件夹结构: 请在这里查看图像 索引.js: const express = 需要...

回答 1 投票 0

在 Spring MVC 中我应该使用什么模板引擎?

我正在学习 Spring MVC,想要创建一个网站。主要问题是模板系统。我应该使用 JSP / JSF / Apache FreeMarker / Thymeleaf 还是其他? 我看到很多关于这个的讨论

回答 3 投票 0

如何从同一 YAML 文件中的其他位置引用 YAML“设置”?

我有以下 YAML 内容: 路径: 路径:/path/to/root/a 路径b:/路径/到/root/b 路径c:/路径/到/root/c 我如何通过从三个中删除 /path/to/root/ 来“规范化”这一点......

回答 10 投票 0

寻找独立的命令行代码生成器脚本

我正在寻找一个库或命令行脚本,它允许我创建可以从命令行生成的自定义模板。 ruby on Rails 脚手架生成器几乎相同......

回答 4 投票 0

用 javascript 对象替换字符串值

我目前正在为 NodeJs 制作一个小模块。为此我需要一点帮助。 我会这样讲。 我有一个带字符串的变量。它包含一个字符串 html 值。现在我需要替换 $(ti...

回答 5 投票 0

如何从同一 YAML 文件中的其他位置引用 YAML“设置”?

我有以下 YAML: 路径: 路径:/path/to/root/a 路径b:/路径/到/root/b 路径c:/路径/到/root/c 我怎样才能“规范化”这个,通过从三个路径中删除 /path/to/root/ ,并有......

回答 10 投票 0

FreeMarker 模板中的 if-else

FreeMarker 模板支持具有以下语法的 if 语句 <#if hot> 很热。 我查看了文档,找不到任何对 if-else 状态的支持......

回答 4 投票 0

如何评估纯文本 php 并将结果导出到 html 文件

我目前正在尝试为我正在开发的项目创建一个小型模板引擎,并且我正在使用一个系统,其中我将 {$tag} 替换为预设标签。假设我将 {username} 放入我的临时表中...

回答 1 投票 0

从子模板传递 Pug 变量以在父模板块中使用

我正在开发一个使用 Pug 模板引擎的项目。我的所有 Pug 文件(layout.pug、head.pug、index.pug 等)都存储在名为 pug 的文件夹中。在我的layout.pug 文件中,我已经建立了...

回答 1 投票 0

解决项目结构中的 Pug 模板集成问题

我正在开发一个使用 Pug 模板引擎的项目。我的所有 Pug 文件(layout.pug、head.pug、index.pug 等)都存储在名为 pug 的文件夹中。在我的layout.pug 文件中,我已经建立了...

回答 1 投票 0

google.script.run 无法在 HTML 模板中运行

我正在通过 HTML 模板从库开发电子表格工具,但服务器功能不起作用。 gs简化代码(函数较长): 函数取消版本(){ ...

回答 2 投票 0

Nunjucks:带有多个“and”或“or”条件的“if”

今天我的队友正在努力解决如何在 Nunjucks 模板的 if 语句中添加带有“and”或“or”的多个条件。经过大量搜索后,他找到了答案,但在 Stackoverflow 上却找不到。我...

回答 2 投票 0

Pug 找不到已安装的Highlight.js JSTransformer 过滤器

文档说我只需通过 npm 安装过滤器即可使用它们。 如果您希望能够在 Pug 模板中使用过滤器,您首先要确保这些功能是

回答 1 投票 0

带有命名参数的 Java 字符串模板化器/格式化器

是否有像 String.format 这样的标准或至少广泛的实现,但带有命名参数? 我想以这样的方式格式化模板化字符串: 地图 是否有类似 String.format 之类的标准或至少广泛的实现,但带有命名参数? 我想以这样的方式格式化模板化字符串: Map<String, Object> args = new HashMap<String, Object>(); args.put("PATH", "/usr/bin"); args.put("file", "foo"); String s = someHypotheticalMethod("#{PATH}/ls #{file}"); // "/usr/bin/ls foo" 从技术上讲,它几乎与: String[] args = new String[] { "/usr/bin", "foo" }; String s = String.format("%1$s/ls %2$s", args); // "/usr/bin/ls foo" 但带有命名参数。 我知道: 字符串.format 格式化程序 消息格式 但它们都使用有序或至少编号的参数,而不是命名的参数。我知道实现它很简单,但是我是否在标准 Java 库中或至少在 Apache Commons / Guava / 类似的东西中寻找一种机制,而不引入引人注目的模板引擎? 注意:我对成熟的模板引擎并不真正感兴趣,它具有一些命令式/功能逻辑、流程控制、修饰符、子模板/包含、迭代器等功能。通常以下方法是有效的 4 -line 实现 - 这就是我所需要的: public static String interpolate(String format, Map<String, ? extends Object> args) { String out = format; for (String arg : args.keySet()) { out = Pattern.compile(Pattern.quote("#{" + arg + "}")). matcher(out). replaceAll(args.get(arg).toString()); } return out; } 如果无法选择 Java 7,您也可以尝试 org.apache.commons.lang3.text.StrSubstitutor。它完全做你想要它做的事。它是否轻量级可能取决于您是否也使用其他 commons-lang 的东西。 Matcher#appendReplacement()会有所帮助 我最近发现JUEL非常符合描述。它是从JSP中取出的表达语言。它声称也非常快。 我即将在我自己的一个项目中尝试一下。 但是对于更轻量级的,这是你的变体,请尝试这个(包含在单元测试中): public class TestInterpolation { public static class NamedFormatter { public final static Pattern pattern = Pattern.compile("#\\{(?<key>.*)}"); public static String format(final String format, Map<String, ? extends Object> kvs) { final StringBuffer buffer = new StringBuffer(); final Matcher match = pattern.matcher(format); while (match.find()) { final String key = match.group("key"); final Object value = kvs.get(key); if (value != null) match.appendReplacement(buffer, value.toString()); else if (kvs.containsKey(key)) match.appendReplacement(buffer, "null"); else match.appendReplacement(buffer, ""); } match.appendTail(buffer); return buffer.toString(); } } @Test public void test() { assertEquals("hello world", NamedFormatter.format("hello #{name}", map("name", "world"))); assertEquals("hello null", NamedFormatter.format("hello #{name}", map("name", null))); assertEquals("hello ", NamedFormatter.format("hello #{name}", new HashMap<String, Object>())); } private Map<String, Object> map(final String key, final Object value) { final Map<String, Object> kvs = new HashMap<>(); kvs.put(key, value); return kvs; } } 我会扩展它以添加便捷的方法来快速键值对 format(format, key1, value1) format(format, key1, value1, key2, value2) format(format, key1, value1, key2, value2, key3, value3) ... 从 java 7+ 转换到 java 6- 应该不会太难 StringTemplate 可能是您可能得到的轻量级插值引擎,尽管我不知道它如何在资源方面与 FreeMarker、Mustache 或 Velocity 之类的东西相比。 另一个选择可能是 EL 引擎,例如 MVEL,它具有 模板引擎。 这是我的解决方案: public class Template { private Pattern pattern; protected Map<CharSequence, String> tokens; private String template; public Template(String template) { pattern = Pattern.compile("\\$\\{\\w+\\}"); tokens = new HashMap<CharSequence, String>(); this.template = template; } public void clearAllTokens() { tokens.clear(); } public void setToken(String token, String replacement) { if(token == null) { throw new NullPointerException("Token can't be null"); } if(replacement == null) { throw new NullPointerException("Replacement string can't be null"); } tokens.put(token, Matcher.quoteReplacement(replacement)); } public String getText() { final Matcher matcher = pattern.matcher(template); final StringBuffer sb = new StringBuffer(); while(matcher.find()) { final String entry = matcher.group(); final CharSequence key = entry.subSequence(2, entry.length() - 1); if(tokens.containsKey(key)) { matcher.appendReplacement(sb, tokens.get(key)); } } matcher.appendTail(sb); return sb.toString(); } public static void main(String[] args) { Template template = new Template("Hello, ${name}."); template.setToken("name", "Eldar"); System.out.println(template.getText()); } } 我知道我的答案来得有点晚了,但如果你仍然需要这个功能,而不需要下载成熟的模板引擎,你可以看看aleph-formatter(我是作者之一): Student student = new Student("Andrei", 30, "Male"); String studStr = template("#{id}\tName: #{st.getName}, Age: #{st.getAge}, Gender: #{st.getGender}") .arg("id", 10) .arg("st", student) .format(); System.out.println(studStr); 或者你可以链接参数: String result = template("#{x} + #{y} = #{z}") .args("x", 5, "y", 10, "z", 15) .format(); System.out.println(result); // Output: "5 + 10 = 15" 在内部,它使用 StringBuilder 通过“解析”表达式创建结果,不执行字符串连接、正则表达式/替换。 我还在我的 str utils 中做了一个(未测试)string.MapFormat("abcd {var}",map)。 //util public static String mapFormat(String template, HashMap<String, String> mapSet) { String res = template; for (String key : mapSet.keySet()) { res = template.replace(String.format("{%s}", key), mapSet.get(key)); } return res; } //use public static void main(String[] args) { boolean isOn=false; HashMap<String, String> kvMap=new HashMap<String, String>(); kvMap.put("isOn", isOn+""); String exp=StringUtils.mapFormat("http://localhost/api/go?isOn={isOn}", kvMap); System.out.println(exp); } 您可以使用Java的字符串模板功能。 它在 JEP 430 中进行了描述,并作为预览功能出现在 JDK 21 中。这是一个使用示例: String name = "Joan"; String info = STR."My name is \{name}"; assert info.equals("My name is Joan"); // true Java 的字符串模板比其他语言(例如 Python 的 f 字符串)中的插值更通用,也更安全。例如,字符串连接或插值使得 SQL 注入攻击成为可能: String query = "SELECT * FROM Person p WHERE p.last_name = '" + name + "'"; ResultSet rs = conn.createStatement().executeQuery(query); 但是这个变体(来自 JEP 430)可以防止 SQL 注入: PreparedStatement ps = DB."SELECT * FROM Person p WHERE p.last_name = \{name}"; ResultSet rs = ps.executeQuery();

回答 8 投票 0

如何在Java中从字符串模板生成字符串?

我希望我的Java应用程序从用户读取字符串,该字符串可能包含一些标签,例如: 字符串文本 =“值 1 = #value1 且值 2 = #value2”; int[] intArray = new int[] {4,5}; 还有...

回答 4 投票 0

在服务器端使用 python str.format 方法与用户提交的模板安全吗?

我正在开发一个项目,用户必须能够提交包含占位符的模板,以便稍后呈现以生成动态内容。 例如,用户可能会提交如下模板: &quo...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.