是否可以在Twig中在布局文件中设置自动窗口策略
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以在Twig中在布局文件中设置自动窗口策略相关的知识,希望对你有一定的参考价值。
我有一个布局文件,在这样的javascript数组中有一个{% block content %}{% endblock %}
<script type="text/javascript">
cols:[
{% block content %}{% endblock %}
];
</script>
然后在许多使用这样的布局文件的模板中进行扩展(真正的模板有更多的代码和变量行):
{% block content %}
{ view:"text", name:"visitDate", value:"{{ date }}", label:"Date/Time:", labelWidth:100, width:285, labelAlign:"right", readonly:true },
{% endblock %}
由于content
块总是需要使用“js”策略进行转义,有没有办法在布局模板中指定这个我已经累了:
<script type="text/javascript">
cols:[
{% autoescape 'js' %}
{% block content %}{% endblock %}
{% endautoescape %}
];
</script>
但这似乎不起作用,并且在Twig文档中找不到任何示例。如果我在模板中的autoescape
块中添加content
块,我可以使它工作,但这不是正确的方法。
例如,使用上面的代码,应将以下html / Javascript发送到{{ date }}
=“17/12/2017 15:01:53”的浏览器:
<script type="text/javascript">
cols:[
{ view:"text", name:"visitDate", value:"17x2F12x2F2017x2015x3A01x3A53", label:"Date/Time:", labelWidth:100, width:285, labelAlign:"right", readonly:true },
];
</script>
只有儿童模板content
块中的模板变量才能被转义,而不是实际的Javascript代码,如果您使用{{ block('content')|e('js') }}
这样的内容,就会得到这些代码。
答案
我能想到的一个解决方案是创建节点访问者类,它将处理每个树枝节点,并根据块的名称,它将应用相应的转义策略。
- 首先是create custom twig extension
- 创建节点访问者对象,它将转义策略应用于打开和关闭
content
块之间的每个节点 - 在扩展中注册节点访问者。
这是一个示例访问者,它将在js
块中的每个qazxsw poi节点上应用qazxsw poi转义过滤器:
print
以上是关于是否可以在Twig中在布局文件中设置自动窗口策略的主要内容,如果未能解决你的问题,请参考以下文章