美文网首页
python jinja2 Template使用,模版的空格问题

python jinja2 Template使用,模版的空格问题

作者: 苏苏林 | 来源:发表于2022-06-11 15:09 被阅读0次

    使用python jinja2 Template的时候,在控制块(比如一个 for 标签、一段注释或变 量表达式)的开始或结束放置一个减号( - ),可以移除块前或块后的空白。
    但用的时候总是会多出或缺失回车,所以做了些测试记录一下。

    >>> from jinja2 import Template
    >>> tmpstr = '''---------
    ... {% for item in seq %}       # 回车
    ...     {{ item }}                       # 回车
    ... {% endfor %}                   # 回车
    ... -------------
    ... '''
    >>> llll = [12345]
    >>> tmp = Template(tmpstr)
    >>> conf = tmp.render(seq=llll)
    >>> print conf
    ---------
                                            # 产生三个回车
        12345
    
    -------------
    
    >>> tmpstr = '''---------
    ... {% for item in seq %}            # 每次循环产生一个回车,2
    ...     {{ item }}                        # seq有两个元素,每个元素自己产生一个回车,2
    ... {% endfor %}                       # 但end只会产生一个回车,1
    ... -------------
    ... '''
    >>> llll = [12345, 6789]
    >>> tmp = Template(tmpstr)
    >>> conf = tmp.render(seq=llll)
    >>> print conf
    ---------
    
        12345
    
        6789
    
    -------------
    

    在 for 和 endfor的后面加 "-",可以看到回车正常了,但item前面的空格也没了,说明for后面的"-"其消除了不止本行回车,还有下一行的空格。

    >>> tmpstr = '''-------------
    ... {% for item in seq -%}                
    ...     {{ item }}
    ... {% endfor -%}
    ... -------------
    ... '''
    >>> llll = [12345, 6789]
    >>> tmp = Template(tmpstr)
    >>> conf = tmp.render(seq=llll)
    >>> print conf
    -------------
    12345
    6789
    -------------
    

    在 endfor 前面加'-'(endfor 大括号前面有空格),可以看到 item后面的回车和endfor前面的回车都没了。其消除了endfor之前的所有空格和回车。

    >>> tmpstr = '''-------------
    ... {% for item in seq -%}
    ...     {{ item }}
    ...   {%- endfor %}              ## endfor 前面有空格
    ... -------------
    ... '''
    >>> llll = [1234, 5678]
    >>> tmp = Template(tmpstr)
    >>> conf = tmp.render(seq=llll)
    >>> print conf
    -------------
    12345678
    -------------
    

    不输出item,可以看到endfor 前面的"-"消除了其和for之间的所有空格和回车。

    >>> tmpstr = '''-------------
    ...   {% for item in seq %}         ## 前面2个空格,后面有4个空格+1个回车
    ...       {%- endfor %}                ## 前面4个空格
    ... -------------
    ... '''
    >>> llll = [1234, 5678]
    >>> tmp = Template(tmpstr)
    >>> conf = tmp.render(seq=llll)
    >>> print conf
    -------------
      
    -------------
    >>>
    

    下面这两组测试说明,没轮循环运行的是 for 和endfor的后大括号和前大括号之间所有语句。
    第一个测试例:
    第一次循环,8 * 空格(for前面) + (消除for行回车+消除item行空格的)item + 回车(item行)+2空格(endfor前面)。
    第二次循环,(消除for行回车+消除item行空格的)item+ 回车(item行)+2
    空格(endfor前面)。
    总的就是。
    第二个测试例类似。

    >>> tmpstr = '''-------------
    ...         {% for item in seq -%}      
    ...   {{ item }}                                # 前面2 * " '"
    ...   {% endfor -%}                        # 前面2 * " '"
    ... -------------
    ... '''
    >>> llll = [1234, 5678]
    >>> tmp = Template(tmpstr)
    >>> conf = tmp.render(seq=llll)
    >>> print conf
    -------------
            1234
      5678
      -------------
    
    >>> tmpstr = '''-------------
    ...   {% for item in seq -%}
    ...   {{ item }}
    ...         {% endfor -%}
    ... -------------
    ... '''
    >>> llll = [1234, 5678]
    >>> tmp = Template(tmpstr)
    >>> conf = tmp.render(seq=llll)
    >>> print conf
    -------------
      1234
            5678
            -------------
    

    相关文章

      网友评论

          本文标题:python jinja2 Template使用,模版的空格问题

          本文链接:https://www.haomeiwen.com/subject/dctwmrtx.html