Вот что я делаю в усах.java:
import java.util.Collection;
import java.util.Map;
import java.util.Set;
public class UrlHelper implements Map<String, String> {
public static final UrlHelper instance = new UrlHelper();
private static final String NORMAL_PREFIX = "url";
private final String virtualHost;
// configure virtualhost here
private UrlHelper() {
virtualHost = "/";
}
public boolean containsKey(Object key) {
return key.toString().indexOf(':') != -1;
}
public String get(Object key) {
String k = key.toString();
String prefix = k.substring(0, k.indexOf(':'));
String url = k.substring(k.indexOf(":") + 1);
if (prefix.equals(NORMAL_PREFIX))
return virtualHost + url;
return virtualHost + "static/" + prefix + "/" + url + "." + prefix;
}
// Default implementation for the other 'Map' methods
}
При рендеринге я делаю это:
mustache.execute(writer,new Object[] { model, UrlHelper.instance }).flush();
Вы можете использовать это так (предположим, ваше приложение размещено в / app):
{{js:lib/jquery}} {{! /app/static/js/lib/jquery.js }}
{{css:site}} {{! /app/static/css/site.css }}
{{url:users/edit/1}} {{! /app/users/edit/1 }}
Также возможно иметь один префикс для всех статических ресурсов (например, статических), но вы не можете использовать точки, чтобы указать расширение файла, поэтому вы должны использовать некоторые другие символы для представления точек и замены в вашей обработке. код.
Вероятно, вы можете адаптировать эту технику к вашему веб-фреймворку / языку.