Jinja2语法小记


jinja2模板语法小记

Jinja2模板中文文档

三种常见界定符

  1. 表达式
    {{ ... }}

用于装载字符串、变量、函数调用等

  1. 语句
    {% ... %}

用于装载控制语句,比如if判断、for循环等

  1. 注释
    {# ... #}

用于装载一个注释,模板渲染的时候会被忽略掉

变量

  1. 在模板中,我们可以使用“.”获取变量的属性
user = {
    'username' : 'shansan',
    'bio': '我佛了',
}

如果user为传入模板中的字典变量,则我们可通过”.“获取它的键值。
eg:user.username
user.username等价于user[‘username’]

  1. 我们可以用set标签在模板中定义变量
{% set navigation = [('/','Home'),('/about','关于我')] %}

使用endset声明结束

过滤器(filter)

过滤器(filter)是一些可以用来修改和过滤特殊变量值的函数。
过滤器和变量用一个竖线“|”(管道符号)隔开,需要参数的过滤器可以像函数一样使用括号传递

eg: 对一个movies列表使用length过滤器获取其长度

movies|length

下面是Jinja2常用的内置过滤器

过滤器 说明
default(value,default_value,boolean=False) 设置默认值,默认值作为参数传入,别名为d
escap(s) 转义HTML文本,别名为e
first(seq) 返回序列的第一个元素
last(seq) 返回列表的最后一个元素
length(object) 返回变量的长度
safe(value) 将变量标记为安全,避免转义
wordcount(s) 计算单词数量

过滤器函数的第一个参数表示被过滤的变量值(value)或字符串(s),即竖线符号左侧的值其他参数可以使用括号传入

测试器(Test)

测试器主要用来判断一个值是否满足某种变量类型,返回布尔值(True or False)的特殊函数
语法为:if…is…

  • is的左侧是测试器函数的第一个参数(value)
  • 其他参数可以通过添加括号传入,也可以在右侧使用空格连接

Jinja2常用内置测试器

测试器 说明
callable(object) 判断对象是否可调用
defined(value) 判断变量是否已定义
none(value) 判断变量是否为None
number(value) 判断变量是否为数字
string(value) 判断变量是否为字符串
sequence(value) 判断变量是否为序列,比如字符串、列表、元组
iterable(value) 判断变量是否可迭代
mapping(value) 判断变量是否是匹配对象,比如字典
smeas(value,other) 判断变量与other是否指向相同的内存地址
{% if foo is smeas(bar) %}
{# 等价于 #}
{% if foo is smeas bar %}
```
判断foo和bar所以指向的内存地址是否相同

# 语句

>在Jinja2中,语句使用**{% raw %}{% ... %}{% endraw %}**标识
>在语句结束的地方,必须添加结束标签

- if语句使用endif
- for语句使用endfor

```Jinja2
{% if user.name == 'shansan' %}
    

you are right!

{% else %}

you are wrong!

{% endif %}
{% for g in ga %}
    
  • {{ g.name }} - {{ g.year }}
  • {% endfor %}

    不可使用break和continue控制循环的执行

    模板

    局部模板

    • 当多个独立模板中使用到同一块HTML代码时,可以把这部分代码抽离出来,放到局部模板中
    • 局部模板的命名一般以一个下划线开始
    • 使用include标签插入一个局部模板
    {% include '_banner.html' %}

    • 宏,类似于Python中的函数。使用宏可以封装一部分模板代码
    • 一般把宏寄存在即存在名为macros.html或_macros.html文件中
    • 使用macro和endmacro标签声明宏的开始和结束
    • 在开始标签中定义宏的名称和接收的参数
    {% macro qux(amount=1) %}
        {% if amount==1 %}
            I am qux.
        {% elif amount>1 %}
            We are qux.
        {% endif %}
    {% endmacro %} 

    就像从Python模块中导入函数一样,我们可以使用import导入宏

    {% from 'macros.html' import qux %}

    PS:默认情况下,使用include导入一个局部模板会传递上下文到局部模板中,但使用import却不会

    模板继承

    模板继承允许我们构建一个包含站点共同元素的基本模板”骨架”,并定义子模版可以覆盖的块

    1. 基模板 base.html

    ** 在基模板中定义的块(block),可以让子模版通过定义同名的块来执行继承操作 **

    块的开始和结束分别使用block和endblock标签,不同的块允许嵌套
    以下示例代码中使用head、title、styles、content、footer和scripts划分了不同的标签块

    <!DOCTYPE html>
    <html>
    <head>
        {% block head %}
            
    	    {% block title %}Template - HelloFlask{% endblock %}</title>
            {% block styles %}{% endblock styles %}
    	{% endblock head %}
    </head>
    <body>
        <ul><li><a href="{{ url_for('index') }}">Home</a></li></ul>
        <main>
        	{% block content %}{% endblock content %}
        </main>
        <footer>
        	{% block footer %}
            {% endblock footer %}
        </footer>
        {% block scripts %}{% endblock scripts %}
    </body>
    </html>
    ```
    
    2. 子模版 index.html
    
    - 当在子模版创建同名的块时,会使用字块的内容覆盖父块的内容
    - 这里子模版的content块的内容覆盖了基模板content块的内容
    - <font color=red>extends 标签必须是模板中的第一个 标签</font>
    
    ```html
    {% extends 'base.html' %}
    {% from 'macros.html' import qux %}
    
    {% block content %}
    {% set name='baz' %}
    <h1>Template</h1>
    <ul>
    	<li><a href="{{ url_for('watchlist') }}">Watchlist</a></li>
    	<li>Filter: {{ foo|musical }}</li>
    	<li>Global: {{ bar() }}</li>
    	<li>Test: {% if name == 'baz' %}I am baz.{% endif %}</li>
    	<li>Macro: {{ qux(amount=5) }}</li>
    </ul>
    {% endblock content %}
    ```
    
    *** 如需要向基模板中追加内容,可以使用Jinja2的super()函数 ***
    
    如向基模板的styles块追加一行样式
    
    ```Jinja2
    {% block styles %}
    {{ super() }}
    <style>
        html{
            color: red;
        }
    </style>
    {% endblock %}</code></pre>
    <hr>
    <p>参考:</p>
    <ul>
    <li><p><a href="https://book.douban.com/subject/30310340/" target="_blank" rel="noopener">https://book.douban.com/subject/30310340/</a></p>
    </li>
    <li><p><a href="https://www.cnblogs.com/yanzi-meng/p/8342798.html" target="_blank" rel="noopener">https://www.cnblogs.com/yanzi-meng/p/8342798.html</a></p>
    </li>
    <li><p><a href="http://docs.jinkan.org/docs/jinja2/templates.html#id21" target="_blank" rel="noopener">http://docs.jinkan.org/docs/jinja2/templates.html#id21</a></p>
    </li>
    </ul>
    
                </div>
                <hr/>
    
                
    
        <div class="reprint" id="reprint-statement">
            
                <div class="reprint__author">
                    <span class="reprint-meta" style="font-weight: bold;">
                        <i class="fas fa-user">
                            文章作者:
                        </i>
                    </span>
                    <span class="reprint-info">
                        <a href="http://yeshan333.github.io" rel="external nofollow noreferrer">ShanSan</a>
                    </span>
                </div>
                <div class="reprint__type">
                    <span class="reprint-meta" style="font-weight: bold;">
                        <i class="fas fa-link">
                            文章链接:
                        </i>
                    </span>
                    <span class="reprint-info">
                        <a href="http://yeshan333.github.io/2019/01/09/Jinja2%E8%AF%AD%E6%B3%95%E5%B0%8F%E8%AE%B0/">http://yeshan333.github.io/2019/01/09/Jinja2%E8%AF%AD%E6%B3%95%E5%B0%8F%E8%AE%B0/</a>
                    </span>
                </div>
                <div class="reprint__notice">
                    <span class="reprint-meta" style="font-weight: bold;">
                        <i class="fas fa-copyright">
                            版权声明:
                        </i>
                    </span>
                    <span class="reprint-info">
                        本博客所有文章除特別声明外,均采用
                        <a href="https://creativecommons.org/licenses/by/4.0/deed.zh" rel="external nofollow noreferrer" target="_blank">CC BY 4.0</a>
                        许可协议。转载请注明来源
                        <a href="http://yeshan333.github.io" target="_blank">ShanSan</a>
                        !
                    </span>
                </div>
            
        </div>
    
        <script async defer>
          document.addEventListener("copy", function (e) {
            let toastHTML = '<span>复制成功,请遵循本文的转载规则</span><button class="btn-flat toast-action" onclick="navToReprintStatement()" style="font-size: smaller">查看</a>';
            M.toast({html: toastHTML})
          });
    
          function navToReprintStatement() {
            $("html, body").animate({scrollTop: $("#reprint-statement").offset().top - 80}, 800);
          }
        </script>
    
    
    
                <div class="tag_share" style="display: block;">
                    <div class="post-meta__tag-list" style="display: inline-block;">
                        
                            <div class="article-tag">
                                
                                    <a href="/tags/Flask/">
                                        <span class="chip bg-color">Flask</span>
                                    </a>
                                
                            </div>
                        
                    </div>
                    <div class="post_share" style="zoom: 80%; width: fit-content; display: inline-block; float: right; margin: -0.15rem 0;">
                        <link rel="stylesheet" type="text/css" href="/libs/share/css/share.min.css">
    
    <div id="article-share">
        
        
        <div class="social-share" data-sites="twitter,facebook,google,qq,qzone,wechat,weibo,douban,linkedin" data-wechat-qrcode-helper="<p>微信扫一扫即可分享!</p>"></div>
        <script src="/libs/share/js/social-share.min.js"></script>
        
    
        
    
    </div>
    
                    </div>
                </div>
                
                    <style>
        #reward {
            margin: 40px 0;
            text-align: center;
        }
    
        #reward .reward-link {
            font-size: 1.4rem;
            line-height: 38px;
        }
    
        #reward .btn-floating:hover {
            box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2), 0 5px 15px rgba(0, 0, 0, 0.2);
        }
    
        #rewardModal {
            width: 320px;
            height: 350px;
        }
    
        #rewardModal .reward-title {
            margin: 15px auto;
            padding-bottom: 5px;
        }
    
        #rewardModal .modal-content {
            padding: 10px;
        }
    
        #rewardModal .close {
            position: absolute;
            right: 15px;
            top: 15px;
            color: rgba(0, 0, 0, 0.5);
            font-size: 1.3rem;
            line-height: 20px;
            cursor: pointer;
        }
    
        #rewardModal .close:hover {
            color: #ef5350;
            transform: scale(1.3);
            -moz-transform:scale(1.3);
            -webkit-transform:scale(1.3);
            -o-transform:scale(1.3);
        }
    
        #rewardModal .reward-tabs {
            margin: 0 auto;
            width: 210px;
        }
    
        .reward-tabs .tabs {
            height: 38px;
            margin: 10px auto;
            padding-left: 0;
        }
    
        .reward-content ul {
            padding-left: 0 !important;
        }
    
        .reward-tabs .tabs .tab {
            height: 38px;
            line-height: 38px;
        }
    
        .reward-tabs .tab a {
            color: #fff;
            background-color: #ccc;
        }
    
        .reward-tabs .tab a:hover {
            background-color: #ccc;
            color: #fff;
        }
    
        .reward-tabs .wechat-tab .active {
            color: #fff !important;
            background-color: #22AB38 !important;
        }
    
        .reward-tabs .alipay-tab .active {
            color: #fff !important;
            background-color: #019FE8 !important;
        }
    
        .reward-tabs .reward-img {
            width: 210px;
            height: 210px;
        }
    </style>
    
    <div id="reward">
        <a href="#rewardModal" class="reward-link modal-trigger btn-floating btn-medium waves-effect waves-light red">赏</a>
    
        <!-- Modal Structure -->
        <div id="rewardModal" class="modal">
            <div class="modal-content">
                <a class="close modal-close"><i class="fas fa-times"></i></a>
                <h4 class="reward-title">你的赏识是我前进的动力</h4>
                <div class="reward-content">
                    <div class="reward-tabs">
                        <ul class="tabs row">
                            <li class="tab col s6 alipay-tab waves-effect waves-light"><a href="#alipay">支付宝</a></li>
                            <li class="tab col s6 wechat-tab waves-effect waves-light"><a href="#wechat">微 信</a></li>
                        </ul>
                        <div id="alipay">
                            <img src="/medias/reward/alipay.png" class="reward-img" alt="支付宝打赏二维码">
                        </div>
                        <div id="wechat">
                            <img src="/medias/reward/wechat.png" class="reward-img" alt="微信打赏二维码">
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    <script>
        $(function () {
            $('.tabs').tabs();
        });
    </script>
                
            </div>
        </div>
    
        
    
        
    
        
    
        
    
        
    
        
    
    <article id="prenext-posts" class="prev-next articles">
        <div class="row article-row">
            
            <div class="article col s12 m6" data-aos="fade-up">
                <div class="article-badge left-badge text-color">
                    <i class="fas fa-chevron-left"></i> 上一篇</div>
                <div class="card">
                    <a href="/2019/01/16/%E4%BD%A0%E6%89%80%E6%8B%A5%E6%9C%89%E7%9A%84%E7%9F%A5%E8%AF%86%E5%B9%B6%E4%B8%8D%E5%8F%96%E5%86%B3%E4%BA%8E%E4%BD%A0%E8%AE%B0%E5%BE%97%E5%A4%9A%E5%B0%91%EF%BC%8C%E8%80%8C%E5%9C%A8%E4%BA%8E%E5%AE%83%E4%BB%AC%E8%83%BD%E5%90%A6%E5%9C%A8%E6%81%B0%E5%BD%93%E7%9A%84%E6%97%B6%E5%80%99%E8%A2%AB%E5%9B%9E%E5%BF%86%E8%B5%B7%E6%9D%A5%E3%80%82/">
                        <div class="card-image">
                            
                            
                            <img src="/medias/featureimages/10.jpg" class="responsive-img" alt="你所拥有的知识并不取决于你记得多少,而在于它们能否在恰当的时候被回忆起来。">
                            
                            <span class="card-title">你所拥有的知识并不取决于你记得多少,而在于它们能否在恰当的时候被回忆起来。</span>
                        </div>
                    </a>
                    <div class="card-content article-content">
                        <div class="summary block-with-text">
                            
                                #
    
    
    
    
    
                            
                        </div>
                        <div class="publish-info">
                            <span class="publish-date">
                                <i class="far fa-clock fa-fw icon-date"></i>2019-01-16
                            </span>
                            <span class="publish-author">
                                
                                <i class="fas fa-bookmark fa-fw icon-category"></i>
                                
                                <a href="/categories/blog/" class="post-category">
                                        blog
                                    </a>
                                
                                
                            </span>
                        </div>
                    </div>
                    
                    <div class="card-action article-tags">
                        
                        <a href="/tags/blog/">
                            <span class="chip bg-color">blog</span>
                        </a>
                        
                    </div>
                    
                </div>
            </div>
            
            
            <div class="article col s12 m6" data-aos="fade-up">
                <div class="article-badge right-badge text-color">
                    下一篇 <i class="fas fa-chevron-right"></i>
                </div>
                <div class="card">
                    <a href="/2019/01/03/%E6%B3%9B%E5%9E%8B%E7%AE%97%E6%B3%95-1/">
                        <div class="card-image">
                            
                            
                            <img src="/medias/featureimages/14.jpg" class="responsive-img" alt="泛型算法-1">
                            
                            <span class="card-title">泛型算法-1</span>
                        </div>
                    </a>
                    <div class="card-content article-content">
                        <div class="summary block-with-text">
                            
                                泛型算法-1
    泛型算法实现了一些经典算法的公共接口,如排序和搜索;称它们是“泛型的”,是因为它们可以用于不同类型的元素的和多种容器类型(不仅包括标准库类型,还包括内置的数组类型),以及其它类型的序列。
    
    ** 大多数算法都定义在头文件alg
                            
                        </div>
                        <div class="publish-info">
                                <span class="publish-date">
                                    <i class="far fa-clock fa-fw icon-date"></i>2019-01-03
                                </span>
                            <span class="publish-author">
                                
                                <i class="fas fa-bookmark fa-fw icon-category"></i>
                                
                                <a href="/categories/CPP/" class="post-category">
                                        CPP
                                    </a>
                                
                                
                            </span>
                        </div>
                    </div>
                    
                    <div class="card-action article-tags">
                        
                        <a href="/tags/CPP/">
                            <span class="chip bg-color">CPP</span>
                        </a>
                        
                    </div>
                    
                </div>
            </div>
            
        </div>
    </article>
    
    </div>
    
    
    <script>
        $('#articleContent').on('copy', function (e) {
            // IE8 or earlier browser is 'undefined'
            if (typeof window.getSelection === 'undefined') return;
    
            var selection = window.getSelection();
            // if the selection is short let's not annoy our users.
            if (('' + selection).length < Number.parseInt('120')) {
                return;
            }
    
            // create a div outside of the visible area and fill it with the selected text.
            var bodyElement = document.getElementsByTagName('body')[0];
            var newdiv = document.createElement('div');
            newdiv.style.position = 'absolute';
            newdiv.style.left = '-99999px';
            bodyElement.appendChild(newdiv);
            newdiv.appendChild(selection.getRangeAt(0).cloneContents());
    
            // we need a <pre> tag workaround.
            // otherwise the text inside "pre" loses all the line breaks!
            if (selection.getRangeAt(0).commonAncestorContainer.nodeName === 'PRE') {
                newdiv.innerHTML = "<pre>" + newdiv.innerHTML + "</pre>";
            }
    
            var url = document.location.href;
            newdiv.innerHTML += '<br />'
                + '来源: Shan San<br />'
                + '文章作者: ShanSan<br />'
                + '文章链接: <a href="' + url + '">' + url + '</a><br />'
                + '本文章著作权归作者所有,任何形式的转载都请注明出处。';
    
            selection.selectAllChildren(newdiv);
            window.setTimeout(function () {bodyElement.removeChild(newdiv);}, 200);
        });
    </script>
    
    
    <!-- 代码块功能依赖 -->
    <script type="text/javascript" src="/libs/codeBlock/codeBlockFuction.js"></script>
    
    <!-- 代码语言 -->
    
    <script type="text/javascript" src="/libs/codeBlock/codeLang.js"></script>
    
        
    <!-- 代码块复制 -->
    
    <script type="text/javascript" src="/libs/codeBlock/codeCopy.js"></script>
    
    
    <!-- 代码块收缩 -->
    
    <script type="text/javascript" src="/libs/codeBlock/codeShrink.js"></script>
    
    
    <!-- 代码块折行 -->
    
    <style type="text/css">
    code[class*="language-"], pre[class*="language-"] { white-space: pre !important; }
    </style>
    
        </div>
        <div id="toc-aside" class="expanded col l3 hide-on-med-and-down">
            <div class="toc-widget">
                <div class="toc-title"><i class="far fa-list-alt"></i>  目录</div>
                <div id="toc-content"></div>
            </div>
        </div>
    </div>
    
    <!-- TOC 悬浮按钮. -->
    
    <div id="floating-toc-btn" class="hide-on-med-and-down">
        <a class="btn-floating btn-large bg-color">
            <i class="fas fa-list-ul"></i>
        </a>
    </div>
    
    
    <script src="/libs/tocbot/tocbot.min.js"></script>
    <script>
        $(function () {
            tocbot.init({
                tocSelector: '#toc-content',
                contentSelector: '#articleContent',
                headingsOffset: -($(window).height() * 0.4 - 45),
                collapseDepth: Number('0'),
                headingSelector: 'h2, h3, h4'
            });
    
            // modify the toc link href to support Chinese.
            let i = 0;
            let tocHeading = 'toc-heading-';
            $('#toc-content a').each(function () {
                $(this).attr('href', '#' + tocHeading + (++i));
            });
    
            // modify the heading title id to support Chinese.
            i = 0;
            $('#articleContent').children('h2, h3, h4').each(function () {
                $(this).attr('id', tocHeading + (++i));
            });
    
            // Set scroll toc fixed.
            let tocHeight = parseInt($(window).height() * 0.4 - 64);
            let $tocWidget = $('.toc-widget');
            $(window).scroll(function () {
                let scroll = $(window).scrollTop();
                /* add post toc fixed. */
                if (scroll > tocHeight) {
                    $tocWidget.addClass('toc-fixed');
                } else {
                    $tocWidget.removeClass('toc-fixed');
                }
            });
    
            
            /* 修复文章卡片 div 的宽度. */
            let fixPostCardWidth = function (srcId, targetId) {
                let srcDiv = $('#' + srcId);
                if (srcDiv.length === 0) {
                    return;
                }
    
                let w = srcDiv.width();
                if (w >= 450) {
                    w = w + 21;
                } else if (w >= 350 && w < 450) {
                    w = w + 18;
                } else if (w >= 300 && w < 350) {
                    w = w + 16;
                } else {
                    w = w + 14;
                }
                $('#' + targetId).width(w);
            };
    
            // 切换TOC目录展开收缩的相关操作.
            const expandedClass = 'expanded';
            let $tocAside = $('#toc-aside');
            let $mainContent = $('#main-content');
            $('#floating-toc-btn .btn-floating').click(function () {
                if ($tocAside.hasClass(expandedClass)) {
                    $tocAside.removeClass(expandedClass).hide();
                    $mainContent.removeClass('l9');
                } else {
                    $tocAside.addClass(expandedClass).show();
                    $mainContent.addClass('l9');
                }
                fixPostCardWidth('artDetail', 'prenext-posts');
            });
            
        });
    </script>
    
        
    
    </main>
    
    
    
        <footer class="page-footer bg-color">
        <div class="container row center-align" style="margin-bottom: 0px !important;">
            <div class="col s12 m8 l8 copy-right">
                Copyright ©
                <span id="year">2019</span>
                <a href="http://yeshan333.github.io" target="_blank">ShanSan</a>
                | Powered by <a href="https://hexo.io/" target="_blank">Hexo</a>
                | Theme <a href="https://github.com/blinkfox/hexo-theme-matery" target="_blank">Matery</a>
                <br>
                
                
                
                
                
                
                <span id="busuanzi_container_site_pv">
                    | <i class="far fa-eye"></i> 总访问量: <span id="busuanzi_value_site_pv"
                        class="white-color"></span> 次
                </span>
                
                
                <span id="busuanzi_container_site_uv">
                    | <i class="fas fa-users"></i> 总访问人数: <span id="busuanzi_value_site_uv"
                        class="white-color"></span> 人
                </span>
                
                <br>
                
                <br>
                
            </div>
            <div class="col s12 m4 l4 social-link social-statis">
        <a href="https://github.com/yeshan333" class="tooltipped" target="_blank" data-tooltip="访问我的GitHub" data-position="top" data-delay="50">
            <i class="fab fa-github"></i>
        </a>
    
    
    
        <a href="mailto:1329441308@qq.com" class="tooltipped" target="_blank" data-tooltip="邮件联系我" data-position="top" data-delay="50">
            <i class="fas fa-envelope-open"></i>
        </a>
    
    
    
    
    
    
    
        <a href="tencent://AddContact/?fromId=50&fromSubId=1&subcmd=all&uin=1329441308" class="tooltipped" target="_blank" data-tooltip="QQ联系我: 1329441308" data-position="top" data-delay="50">
            <i class="fab fa-qq"></i>
        </a>
    
    
    
    
    
    
    
        <a href="/atom.xml" class="tooltipped" target="_blank" data-tooltip="RSS 订阅" data-position="top" data-delay="50">
            <i class="fas fa-rss"></i>
        </a>
    
    </div>
        </div>
    </footer>
    
    <div class="progress-bar"></div>
    
    
        <!-- 搜索遮罩框 -->
    <div id="searchModal" class="modal">
        <div class="modal-content">
            <div class="search-header">
                <span class="title"><i class="fas fa-search"></i>  搜索</span>
                <input type="search" id="searchInput" name="s" placeholder="请输入搜索的关键字"
                       class="search-input">
            </div>
            <div id="searchResult"></div>
        </div>
    </div>
    
    <script src="/js/search.js"></script>
    <script type="text/javascript">
    $(function () {
        searchFunc("/" + "search.xml", 'searchInput', 'searchResult');
    });
    </script>
        <!-- 回到顶部按钮 -->
    <div id="backTop" class="top-scroll">
        <a class="btn-floating btn-large waves-effect waves-light" href="#!">
            <i class="fas fa-arrow-up"></i>
        </a>
    </div>
    
    
        <script src="/libs/materialize/materialize.min.js"></script>
        <script src="/libs/masonry/masonry.pkgd.min.js"></script>
        <script src="/libs/aos/aos.js"></script>
        <script src="/libs/scrollprogress/scrollProgress.min.js"></script>
        <script src="/libs/lightGallery/js/lightgallery-all.min.js"></script>
        <script src="/js/matery.js"></script>
    
        <!-- Global site tag (gtag.js) - Google Analytics -->
    
    
        <!-- Baidu Analytics -->
    
        <!-- Baidu Push -->
    
    <script>
        (function () {
            var bp = document.createElement('script');
            var curProtocol = window.location.protocol.split(':')[0];
            if (curProtocol === 'https') {
                bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
            } else {
                bp.src = 'http://push.zhanzhang.baidu.com/push.js';
            }
            var s = document.getElementsByTagName("script")[0];
            s.parentNode.insertBefore(bp, s);
        })();
    </script>
    
        
        <script src="/libs/others/clicklove.js" async="async"></script>
        
        
        <script async src="/libs/others/busuanzi.pure.mini.js"></script>
        
    
        
    
        
    
        
    
        
    
        
        
        
        <script src="/libs/instantpage/instantpage.js" type="module"></script>
        
    
    </body>
    
    </html>