zoukankan      html  css  js  c++  java
  • Twig 的 tags学习(中文) 之三 完结

    文章来源 http://twig.sensiolabs.org/doc/tags/index.html

    use标签

    use标签是1.1版本新添加内容。
    这个use标签主要是来解决模板只能从一个父模板继承,而你又想重用其他模板的问题。但是use标签只会导入block区块,
    (注意import只会导入宏macros,include会导入一切。这三个标签要区分清楚)
    比如
    1. {% extends "base.html" %} 
    2.  
    3. {% use "blocks.html" %} 
    4.  
    5. {% block title %}{% endblock %} 
    6. {% block content %}{% endblock %} 
    {% extends "base.html" %}
    
    {% use "blocks.html" %}
    
    {% block title %}{% endblock %}
    {% block content %}{% endblock %}
    而blocks.html的内容是
    1. # blocks.html 
    2. {% block sidebar %}{% endblock %} 
    # blocks.html
    {% block sidebar %}{% endblock %}
    我们从blocks..html导入了 block sidebar 运行的结果几乎等于
    1. {% extends "base.html" %} 
    2.  
    3. {% block sidebar %}{% endblock %} 
    4. {% block title %}{% endblock %} 
    5. {% 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重命名
    1. {% extends "base.html" %} 
    2.  
    3. {% use "blocks.html" with sidebar as base_sidebar %} 
    4.  
    5. {% block sidebar %}{% endblock %} 
    6. {% block title %}{% endblock %} 
    7. {% 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内容
    1. {% extends "base.html" %} 
    2.  
    3. {% use "blocks.html" %} 
    4.  
    5. {% block sidebar %} 
    6.     {{ parent() }} 
    7. {% endblock %} 
    8.  
    9. {% block title %}{% endblock %} 
    10. {% 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函数所达到的效果
    1. {% extends"base.html" %} 
    2.  
    3. {% use "blocks.html"with sidebar as parent_sidebar %} 
    4.  
    5. {% block sidebar %} 
    6.     {{ block('parent_sidebar') }} 
    7. {% endblock %} 
    {% extends "base.html" %}
    
    {% use "blocks.html" with sidebar as parent_sidebar %}
    
    {% block sidebar %}
        {{ block('parent_sidebar') }}
    {% endblock %}
    你可以使用任意数量的use标签,如果多个use标签里的block名字存在重复,那么最后use的那个有效。

    spacelsee标签

    会删除html标签之间的空白
    1. {% spaceless %} 
    2.     <div> 
    3.         <strong>foo</strong> 
    4.     </div> 
    5. {% endspaceless %} 
    6.  
    7. {# output will be <div><strong>foo</strong></div> #} 
    {% spaceless %}
        <div>
            <strong>foo</strong>
        </div>
    {% endspaceless %}
    
    {# output will be <div><strong>foo</strong></div> #}

    autoescape标签

    这个十分汗颜,我居然没看懂。我只知道字面上的意思是自动转义。。但是。。我做实验的时候 还是不知道应怎么使用
    他官方给的例子是
    1. {% autoescape true %} 
    2.     Everything will be automatically escaped in this block 
    3. {% endautoescape %} 
    4.  
    5. {% autoescape false %} 
    6.     Everything will be outputed as is in this block 
    7. {% endautoescape %} 
    8.  
    9. {% autoescape true js %} 
    10.     Everything will be automatically escaped in this block 
    11.     using the js escaping strategy 
    12. {% endautoescape %} 
    {% autoescape true %}
        Everything will be automatically escaped in this block
    {% endautoescape %}
    
    {% autoescape false %}
        Everything will be outputed as is in this block
    {% endautoescape %}
    
    {% autoescape true js %}
        Everything will be automatically escaped in this block
        using the js escaping strategy
    {% endautoescape %}
    而我这么测试。输出的还是原本的内容。
    1. {% autoescape true %} 
    2.     <body><b>aaaa</b></body> 
    3. {% endautoescape %} 
    4.  
    5. {% autoescape false %} 
    6.     <b>aaaa</b> 
    7. {% endautoescape %} 
    8.  
    9. {% autoescape true js %} 
    10.     <script> 
    11.     function aaa(){alert('x');} 
    12.     </script> 
    13. {% endautoescape %} 
    {% autoescape true %}
        <body><b>aaaa</b></body>
    {% endautoescape %}
    
    {% autoescape false %}
        <b>aaaa</b>
    {% endautoescape %}
    
    {% autoescape true js %}
    	<script>
        function aaa(){alert('x');}
    	</script>
    {% endautoescape %}
    这个请教各位路过的师兄了。。。
    他官方文档还说,如果使用了 {% autoescape true %} 那么里面的内容都会被转义成安全的内容,除非你使用raw过滤器。
    1. {% autoescape true %} 
    2.     {{ safe_value|raw }} 
    3. {% endautoescape %} 
    {% autoescape true %}
        {{ safe_value|raw }}
    {% endautoescape %}
    
    另外,twig里函数的返回值都是安全的比如 macros parent
     

    raw标签

    raw标签,保证区块内的数据不被模板引擎解析。
    1. {% raw %} 
    2.     <ul> 
    3.     {% for item in seq %} 
    4.         <li>{{ item }}</li> 
    5.     {% endfor %} 
    6.     </ul> 
    7. {% endraw %} 
    {% raw %}
        <ul>
        {% for item in seq %}
            <li>{{ item }}</li>
        {% endfor %}
        </ul>
    {% endraw %}

    flush标签

    1.5版本新增内容
    告诉模板,刷新输出缓存,在内部其实是调用了php的flush函数
    1. {% flush %} 
    {% flush %}

    do 标签

    1.5版本新增内容
    do 标签的作用就像是输出标签一样{{ }},他可以计算一些表达式,区别是不打印出任何东西
    1. {% do 1 + 2 %} 
    {% do 1 + 2 %}
     
    标签的学习到此结束了。掌声鼓励下。。。。。下面进入过滤器的学习。。。。。。呱唧呱唧
  • 相关阅读:
    20145330 《网络攻防》 后门原理与实践
    20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验
    移动攻击实践
    安卓权限参考
    20145329 《网络对抗技术》Web安全基础实践
    20145329 《网络对抗技术》Web基础
    20145329 《网络对抗技术》网络欺诈技术防范
    20145329 《网络对抗技术》信息搜集与漏洞扫描
    20145329 《网络对抗技术》MSF基础应用
    20145329 《网络对抗技术》辅助模块使用
  • 原文地址:https://www.cnblogs.com/Kakasi/p/2881007.html
Copyright © 2011-2022 走看看