【问题标题】:Is there a way to get a list of all placeholders in a cheetah template有没有办法获取猎豹模板中所有占位符的列表
【发布时间】:2016-03-25 21:41:59
【问题描述】:

例如,如果我有一个模板,例如

"SELECT * FROM myOrders WHERE order_id = ${orderId} and order_date = ${orderDate}"

我想获取该模板中所有占位符的列表,即 ['orderId', 'orderDate']

【问题讨论】:

    标签: python cheetah


    【解决方案1】:

    我可以使用正则表达式来提取这些占位符。

    附言不过,如果在 Cheetah API 中拥有该功能会很不错,也许在 Template 类中。

    示例:

    import re
    templateDef = """
    SELECT * FROM myOrders WHERE order_id = ${orderId} and order_date = ${orderDate}
    """
    placeholders = re.findall(r"\${(\w+)}", templateDef)
    print placeholders
    

    【讨论】:

      【解决方案2】:

      Formatter.parse 应该可以工作:

      s = "SELECT * FROM myOrders WHERE order_id = ${orderId} and order_date = ${orderDate}"
      
      from string import Formatter
      #literal_text, field_name, format_spec, conversion
      print([plh for _, plh, _,_  in Formatter().parse(s) if plh])
      ['orderId', 'orderDate']
      

      【讨论】:

        【解决方案3】:

        这段代码:

        vars = set()
        
        class DummyDict:
            def __getitem__(self, key):
                vars.add(key)
                return 'X'
        
        str(Template('Hello $A $B $C', searchList=[DummyDict()]))
        
        print(vars)
        

        打印:

        {'B', 'A', 'C'}

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-12
          • 1970-01-01
          • 1970-01-01
          • 2011-10-27
          • 2018-01-11
          • 2020-10-18
          相关资源
          最近更新 更多