Node.js Nunjucks:如何使用自定义扩展绕过自动转义?
我设法在Nunjucks.js中进行了异步自定义扩展,但仍有一些问题没有回答。以下是其中之一 如何将扩展配置为不转义其输出。 我的代码看起来是这样的Node.js Nunjucks:如何使用自定义扩展绕过自动转义?,node.js,nunjucks,Node.js,Nunjucks,我设法在Nunjucks.js中进行了异步自定义扩展,但仍有一些问题没有回答。以下是其中之一 如何将扩展配置为不转义其输出。 我的代码看起来是这样的 var nunjucks = require('nunjucks'); module.exports = function CustomExtension() { this.tags = ['docs']; this.parse = function(parser, nodes, lexer) { // parse the args
var nunjucks = require('nunjucks');
module.exports = function CustomExtension() {
this.tags = ['docs'];
this.parse = function(parser, nodes, lexer) {
// parse the args and move after the block end. passing true
// as the second arg is required if there are no parentheses
var args = parser.parseSignature(null, true);
parser.nextToken();
// parse the content until end block
var body = parser.parseUntilBlocks('enddocs');
parser.advanceAfterBlockEnd();
return new nodes.CallExtensionAsync(this, 'run', args, [body]);
};
this.run = function(context, arguments, body, callback) {
var id = body();
somAsyncMagic(id, function(html) {
callback(null, html);
});
};
}
顺便说一下,这段代码在node中使用。如果这能激发某人的想法
谢谢您可以访问所有内部过滤器,因此答案是
cb(null,nunjucks.filters.safe(html))代码>
var nunjucks=require('nunjucks');
var MyLoader=nunjucks.Loader.extend({
async:true,
getSource:函数(名称,回调){
var res='…';
回调(err,res);
}
});
var env=new nunjucks.Environment(new MyLoader(),{autoescape:true});/!
功能自定义扩展(cb){
this.tags=['docs'];
this.parse=函数(解析器、节点、lexer){
var tok=parser.nextToken();
var args=parser.parseSignature(null,true);
parser.nextToken();
var body=parser.parseUntilBlocks('enddocs');
parser.advanceAfterBlockEnd();
返回新节点.CallExtensionAsync(此'run',args,[body],cb);
};
this.run=函数(上下文、参数、正文、cb){
var res=env.filters.safe(args+':'+body());//防止转义
cb(空,res);
};
}
env.addExtension('CustomExtension',new CustomExtension());
env.renderString(“{%docs”“%}”OK“{%enddocs%}”,console.log);
Hey@AikonMogwai,这是转义
字符串未转义
我的问题是正在转义全局扩展。我不得不停止逃跑。我的扩展正在传递html。我的代码的结果是unescape
-string:':“OK”
。转义
字符串将是'TEST:“OK”
。好的,很抱歉,乍一看,您好像是在转义html。让我在我这边试一试,如果是这样的话,我会把它提升为答案。好的!成功了!很抱歉不过只有一件小事<代码>自动转义
应为false。
var nunjucks = require('nunjucks');
var MyLoader = nunjucks.Loader.extend({
async: true,
getSource: function(name, callback) {
var res = '...';
callback(err, res);
}
});
var env = new nunjucks.Environment(new MyLoader(), {autoescape: true}); // !
function CustomExtension(cb) {
this.tags = ['docs'];
this.parse = function(parser, nodes, lexer) {
var tok = parser.nextToken();
var args = parser.parseSignature(null, true);
parser.nextToken();
var body = parser.parseUntilBlocks('enddocs');
parser.advanceAfterBlockEnd();
return new nodes.CallExtensionAsync(this, 'run', args, [body], cb);
};
this.run = function(context, args, body, cb) {
var res = env.filters.safe(args + ':' + body()); // prevent escape
cb(null, res);
};
}
env.addExtension('CustomExtension', new CustomExtension());
env.renderString('{% docs "<TEST>" %}"OK"{% enddocs %}', console.log);