use标签
use标签是1.1版本新添加内容。
这个use标签主要是来解决模板只能从一个父模板继承,而你又想重用其他模板的问题。但是use标签只会导入block区块,
(注意import只会导入宏macros,include会导入一切。这三个标签要区分清楚)
比如 {% extends "base.html" %}
{% use "blocks.html" %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
{% extends "base.html" %}
{% use "blocks.html" %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}而blocks.html的内容是
# blocks.html
{% block sidebar %}{% endblock %}
# blocks.html
{% block sidebar %}{% endblock %}我们从blocks..html导入了 block sidebar
运行的结果几乎等于
{% extends "base.html" %}
{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
{% extends "base.html" %}
{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
要注意,被use标签导入的模板(上例中的block.html),不能再继承别的模板,不能定义宏macros。但它可以再use其他模板。
另外use标签后面的文件名,不能是一个表达式。
当被导入了的block和主模板的block重名了,模板引擎会自动忽略被use标签导入block。
为了避免这种情况。你可以在使用use标签的时候,给block重命名
{% extends "base.html" %}
{% use "blocks.html" with sidebar as base_sidebar %}
{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
{% extends "base.html" %}
{% use "blocks.html" with sidebar as base_sidebar %}
{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
1.3版本新支持了 parent()函数,(这个特别重要)
parent()函数,会自动的搞定block的继承树,如果你在主模板里覆盖了use标签引入进来的block块,而用parent()函数则可以调用被覆盖的那个block内容
{% extends "base.html" %}
{% use "blocks.html" %}
{% block sidebar %}
{{ parent() }}
{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
{% extends "base.html" %}
{% use "blocks.html" %}
{% block sidebar %}
{{ parent() }}
{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
注意,parent()的内容 其实是blocks.html里的block sidebar的内容。因为继承树是 base.html->blocks.html->本模板
如果你在use标签里给导入的block重命名了,那就可以使用block函数,来代替上面代码中的parent函数所达到的效果
{% extends "base.html" %}
{% use "blocks.html" with sidebar as parent_sidebar %}
{% block sidebar %}
{{ block('parent_sidebar') }}
{% endblock %}
{% extends "base.html" %}
{% use "blocks.html" with sidebar as parent_sidebar %}
{% block sidebar %}
{{ block('parent_sidebar') }}
{% endblock %}
你可以使用任意数量的use标签,如果多个use标签里的block名字存在重复,那么最后use的那个有效。
spacelsee标签
会删除html标签之间的空白
{% spaceless %}
{# output will be
{% 自動エスケープ false %}
このブロックでは全てそのまま出力されます
{% endautoescape %}
{% autoescape true js %}
このブロックではすべてが自動的にエスケープされます
js エスケープ戦略を使用する
{% endautoescape %}
そして私はこの方法でそれをテストしました。出力は元のコンテンツのままです。
{% 自動エスケープ true %}
{% autoescape true js %}
<スクリプト>
関数 aaa(){alert('x');}
{% endautoescape %}
通りかかった先輩諸兄の皆さんに聞いていただきたいと思います。 。 。
彼の公式ドキュメントには、{% autoescape true %} が使用されている場合、生のフィルターを使用しない限り、内部のコンテンツは安全なコンテンツにエスケープされると記載されています。
{% 自動エスケープ true %}
{{ 安全な値|生 }}
{% 終了自動エスケープ %}
{% 自動エスケープ true %}
{{ 安全な値|生 }}
{% endautoescape %}
また、親マクロなど、twig内の関数の戻り値も安全です
生タグ
raw タグにより、ブロック内のデータがテンプレート エンジンによって解析されなくなります。 {% 生 %}
{% シーケンス内の項目の %}
{% 終了の %}
これでラベルの勉強は終わりです。拍手に励まされました。 。 。 。 。次にフィルターの学習に入ります。 。 。 。 。 。ギシギシギシギシ
jiaochangyunさんのコラムより抜粋
http://www.bkjia.com/PHPjc/478459.html
www.bkjia.com