Pebble 模板继承失败且没有错误
Pebble template inheritance fails without error
我在 Spring Boot 2 中使用 Pebble 模板引擎,在我开始使用继承之前一切正常。浏览器显示一个空白页面,根本没有返回任何内容。不幸的是,服务器和 Catalina(我使用的是 Tomcat 8.5)日志没有显示任何错误。
在我的 pom 中,我有以下依赖项:
- Spring 启动 2.0.3(作为父级)
- pebble-spring-boot-2-starter(试过 2.6.2 和 3.0.0.BETA01)
- spring-boot-starter-data-jpa
- spring-boot-starter-web
- spring-boot-starter-security
我有以下application.properties
- pebble.suffix = .html.peb
- pebble.cache = false(也试过true)
我的父模板 (resources/templates/base.html.peb)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head></head>
<body>Template test</body>
</html>
我的子模板 (resources/templates/child.html.peb)
{% extends "base.html.peb" %}
当我删除继承时,Pebble 工作正常,并且包含并显示模型,因此 Pebble 确实可以工作。
Pebble Spring Boot Starter 通过连接前缀、模板名称和后缀来解析模板路径:
public class PebbleTemplateAvailabilityProvider 实现 TemplateAvailabilityProvider {
@Override
public boolean isTemplateAvailable(String view, Environment environment, ClassLoader classLoader,
ResourceLoader resourceLoader) {
if (ClassUtils.isPresent("com.mitchellbosecke.pebble.PebbleEngine", classLoader)) {
String prefix = environment.getProperty("pebble.prefix", PebbleProperties.DEFAULT_PREFIX);
String suffix = environment.getProperty("pebble.suffix", PebbleProperties.DEFAULT_SUFFIX);
return resourceLoader.getResource(ResourceLoader.CLASSPATH_URL_PREFIX + prefix + view + suffix).exists();
} else {
return false;
}
}
}
如果模板在 'extends' 指令中指定了后缀,则后缀将被追加一次并且找不到模板,例如:
resources/templates/base.html.peb.html.peb
要解决此问题,pebble 模板名称必须在 'extends' 指令中不带前缀地指定:
{% extends "base" %}
对我来说,这是一个错误。 Pebble Spring Boot Starter 应该能够检测指定的基本模板是否带有后缀。
我在 Spring Boot 2 中使用 Pebble 模板引擎,在我开始使用继承之前一切正常。浏览器显示一个空白页面,根本没有返回任何内容。不幸的是,服务器和 Catalina(我使用的是 Tomcat 8.5)日志没有显示任何错误。
在我的 pom 中,我有以下依赖项:
- Spring 启动 2.0.3(作为父级)
- pebble-spring-boot-2-starter(试过 2.6.2 和 3.0.0.BETA01)
- spring-boot-starter-data-jpa
- spring-boot-starter-web
- spring-boot-starter-security
我有以下application.properties
- pebble.suffix = .html.peb
- pebble.cache = false(也试过true)
我的父模板 (resources/templates/base.html.peb)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head></head>
<body>Template test</body>
</html>
我的子模板 (resources/templates/child.html.peb)
{% extends "base.html.peb" %}
当我删除继承时,Pebble 工作正常,并且包含并显示模型,因此 Pebble 确实可以工作。
Pebble Spring Boot Starter 通过连接前缀、模板名称和后缀来解析模板路径:
public class PebbleTemplateAvailabilityProvider 实现 TemplateAvailabilityProvider {
@Override
public boolean isTemplateAvailable(String view, Environment environment, ClassLoader classLoader,
ResourceLoader resourceLoader) {
if (ClassUtils.isPresent("com.mitchellbosecke.pebble.PebbleEngine", classLoader)) {
String prefix = environment.getProperty("pebble.prefix", PebbleProperties.DEFAULT_PREFIX);
String suffix = environment.getProperty("pebble.suffix", PebbleProperties.DEFAULT_SUFFIX);
return resourceLoader.getResource(ResourceLoader.CLASSPATH_URL_PREFIX + prefix + view + suffix).exists();
} else {
return false;
}
}
}
如果模板在 'extends' 指令中指定了后缀,则后缀将被追加一次并且找不到模板,例如:
resources/templates/base.html.peb.html.peb
要解决此问题,pebble 模板名称必须在 'extends' 指令中不带前缀地指定:
{% extends "base" %}
对我来说,这是一个错误。 Pebble Spring Boot Starter 应该能够检测指定的基本模板是否带有后缀。