【问题标题】:Jinja2 Split string by white spacesJinja2 用空格分割字符串
【发布时间】:2023-04-02 08:13:01
【问题描述】:

我正在使用 Jinja2 模板引擎 (+pelican)。

我有一个字符串“a 1”,我正在寻找一种方法将该字符串一分为二 通过使用空白作为分隔符。

所以我正在寻找的最终结果是一个以数组形式保存两个值的变量。例如str[0] 的计算结果为“a”,而 str[1] 的计算结果为“1”。

提前致谢。

【问题讨论】:

    标签: string split jinja2


    【解决方案1】:

    在字符串上调用 split 应该可以解决问题:

    "a 1".split()
    

    【讨论】:

    • @Loïc 我想我已经使用了与使用 Jinja2 的 Ansible 类似的东西。所以也许这取决于?我不太确定这一点。
    • 只需确认 {% for hostname in allowed_hosts.split() %} 工作正常。所以我假设你也可以做 {% set hostnames=allowed_hosts.split() %},但没有测试过后者。
    • @MichaelNelson 的后一种方法也有效。 {% for instance in instances %} {% set route_name=instance.split(' ')[1] %} BalancerMember http://{{ instance }} route={{ route_name }} {% endfor %}
    • 有谁知道 split() 记录在哪里?如果我找不到它该死的。
    • @MatthewCornell 你的意思是docs.python.org/2/library/stdtypes.html#str.split
    【解决方案2】:

    我遇到了同样的问题,但没有发现任何有用的东西,所以我只是创建了一个自定义过滤器:

    def split_space(string):
        return string.strip().split()
    

    将其添加到过滤器列表(带有烧瓶):

    app = Flask(__name__)
    
    def split_space(string):
        return string.strip().split()
    
    #some code here
    
    if __name__ == '__main__':
    
        app.jinja_env.filters['split_space'] = split_space
        app.run()
    

    并在模板中使用它:

    {% if "string" in element|split_space %} ... {% endif %}
    

    【讨论】:

      【解决方案3】:

      我的解决方案在 iPython 中进行了测试

      In [1]: from jinja2 import Template
      In [2]: Template("{{s.split('-')}}").render(s='a-bad-string')
      Out[2]: u"['a', 'bad', 'string']"
      

      【讨论】:

        【解决方案4】:

        我制作了一个与 Loïc 的答案相同的小插件,但它可以选择指定分隔符。 https://github.com/timraasveld/ansible-string-split-filter

        它允许你输入:

        # my_variable = 'a 1`
        { my_variable | split | join(' and ') } #=> a and 1
        

        【讨论】:

          【解决方案5】:

          我建议使用类似的东西:

          str = "a 1 b 2 c 3"
          val = atr.split()
          

          另外,如果你想指向一个特定的位置,那么你可以使用类似的东西:

          val1 = atr.split()[2]
          

          这会将第二个值放入val1

          【讨论】:

            【解决方案6】:

            你也可以用装饰器来做到这一点:

            from flask import Flask
            app = Flask(__name__)
            
            @app.template_filter('split_space')
            def split_space_filter(s):
                return s.strip().split()
            
            if __name__ == '__main__':
                app.run()
            

            【讨论】:

              猜你喜欢
              • 2012-09-22
              • 2014-12-13
              • 2013-08-02
              • 2013-10-11
              • 1970-01-01
              • 2012-04-22
              • 2020-05-16
              • 1970-01-01
              • 2012-02-14
              相关资源
              最近更新 更多