jinjava

Jinja template engine for Java

  • 所有者: HubSpot/jinjava
  • 平台:
  • 许可证: Apache License 2.0
  • 分类:
  • 主题:
  • 喜欢:
    0
      比较:

Github星跟踪图

jinjava

Build Status
Coverage status
Maven Central
Join the chat at https://gitter.im/HubSpot/jinjava

Java-based template engine based on django template syntax, adapted to render jinja templates (at least the subset of jinja in use in HubSpot content). Currently used in production to render thousands of websites with hundreds of millions of page views per month on the HubSpot CMS.

Note: Requires Java >= 8. Originally forked from jangod.

Get it:

  <dependency>
    <groupId>com.hubspot.jinjava</groupId>
    <artifactId>jinjava</artifactId>
    <version>{ LATEST_VERSION }</version>
  </dependency>

where LATEST_VERSION is the latest version from CHANGES.

or if you're stuck on java 7:

  <dependency>
    <groupId>com.hubspot.jinjava</groupId>
    <artifactId>jinjava</artifactId>
    <version>2.0.11-java7</version>
</dependency>

Example usage:

my-template.html:

<div>Hello, {{ name }}!</div>

java code:

Jinjava jinjava = new Jinjava();
Map<String, Object> context = Maps.newHashMap();
context.put("name", "Jared");

String template = Resources.toString(Resources.getResource("my-template.html"), Charsets.UTF_8);

String renderedTemplate = jinjava.render(template, context);

result:

<div>Hello, Jared!</div>

Voila!

Advanced Topics

Template loading

Jinjava needs to know how to interpret template paths, so it can properly handle tags like:

{% extends "foo/bar/base.html" %}

By default, it will load only a ClasspathResourceLocator. If you want to allow Jinjava to load any file from the
file system, you can add a FileResourceLocator. Be aware the security risks of allowing user input to prevent a user
from adding code such as {% include '/etc/password' %}.

You will likely want to provide your own implementation of
ResourceLoader to hook into your application's template repository, and then tell jinjava about it:

JinjavaConfig config = new JinjavaConfig();

Jinjava jinjava = new Jinjava(config);
jinjava.setResourceLocator(new MyCustomResourceLocator());

To use more than one ResourceLocator, use a CascadingResourceLocator.

JinjavaConfig config = new JinjavaConfig();

Jinjava jinjava = new Jinjava(config);
jinjava.setResourceLocator(new MyCustomResourceLocator(), new FileResourceLocator());

Custom tags, filters and functions

You can provide custom jinja tags, filters, and static functions to the template engine.

// define a custom tag implementing com.hubspot.jinjava.lib.Tag
jinjava.getGlobalContext().registerTag(new MyCustomTag());
// define a custom filter implementing com.hubspot.jinjava.lib.Filter
jinjava.getGlobalContext().registerFilter(new MyAwesomeFilter());
// define a custom public static function (this one will bind to myfn:my_func('foo', 42))
jinjava.getGlobalContext().registerFunction(new ELFunctionDefinition("myfn", "my_func", 
    MyFuncsClass.class, "myFunc", String.class, Integer.class);

// define any number of classes which extend Importable
jinjava.getGlobalContext().registerClasses(Class<? extends Importable>... classes);

See also

主要指标

概览
名称与所有者HubSpot/jinjava
主编程语言Java
编程语言HTML (语言数: 3)
平台
许可证Apache License 2.0
所有者活动
创建于2014-10-13 17:39:22
推送于2025-05-15 09:46:17
最后一次提交2025-05-13 14:42:53
发布数30
最新版本名称jinjava-2.8.0 (发布于 )
第一版名称jinjava-1.0.0 (发布于 2014-10-14 10:32:19)
用户参与
星数727
关注者数164
派生数170
提交数3.6k
已启用问题?
问题数233
打开的问题数98
拉请求数919
打开的拉请求数20
关闭的拉请求数70
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?