2016-09-20 75 views
0

我有一個用作模板的xml文件。 我有這個XML中的多個標記將被實際數據替換。這是我做過什麼:
通過標記字符串替換多個文本

def populate_template(self, value1, value2, value3): 
     with open('my_template.xml', 'rb') as xml_template: 
      template_string = xml_template.read() 

     template_string.replace('{{MARKER_1}}', value1) 
     template_string.replace('{{MARKER_2}}', value2) 
     template_string.replace('{{MARKER_3}}', value3) 
     return template_string 

每個標記可以出現多次的模板中。
我想知道是否有更有效的方法來做到這一點?
高科技的東西:

  • 的Python 2.7

回答

1

是。使用jinja2模板模塊。要使用現有的模板,你可以做這樣的事情:

def populate_template(self, value1, value2, value3): 
    from jinja2 import Template 
    t = Template(open('my_template.xml', 'r').read()) 
    output = t.render(MARKER_1=value2, MARKER_2=value2, MARKER_3=value3) 
    return output 

這是很值得研究的不同的方法可以將參數傳遞給模板,也。例如,同樣的代碼可能已被寫成...

... 
    context = {'MARKER_1': value1, 'MARKER_2', value2, 'MARKER_3': value3} 
    output = t.render(**context) 

,你可以使用這一招你碰巧躺在附近的任何舊類型的字典。這是選擇性地從字典中提取可讀信息的好方法。

jinja2的設計者,作爲對Python原因有同情心的智能餅乾,實際上幫助你通過允許你以任何方式提供上下文,你可以創建一個字典(關鍵字參數,元組列表或(key, value)元組或一個字典 - 包括其他類似字典的東西,如collections.OrderedDict)。所以你也可以寫第二行爲

output = t.render(context) 

這是更具可讀性和更高效(我猜,但它是一個明智的猜測)。

+0

謝謝。我改變了你的代碼,使用'Environment#get_template'方法來獲取模板,它的效果很好。謝謝! –