2016-03-29 11 views
0

Ya bir yapılandırma dosyası kullanarak json şablonunu oluşturmak için bir işlev yazıyorum.python Jinja2 json şablonunu kullanarak yaml conf kullanarak bir dosya yaratıyor

görünüyor şey gibi aşağıda:

render.py:

if len(sys.argv) != 3: 
    print "usage: python render_template.py [yaml_file] [jinja_template_file]" 
    sys.exit(1) 

with open(sys.argv[1], "r") as stream: 
    config = yaml.safe_load(stream) 
with open(sys.argv[2], "r") as stream: 
    template_text = stream.read() 
template = Template(template_text) 

print template.render(config) 

test.yaml:

Application: 
      Hosts: 
       - a 
       - b 

sample.json.templete

 [{ 
"test1": 
{ 

        "objectName": "{{Application.Hosts}}", 

       } 


}] 

ben

[{ 
"test1": 
{ 

        "objectName": ['a' , 'b'], 

       } 


}] 

olsun Ama json dosyası elde ediyorum beri

 ["a", "b"] 

yani gerek

python ./render.py ./test.yaml ./sample.json.templete > sample.json 

çalıştırdığınızda Listeyi çift tırnak içinde istiyorum. Bunu en iyi nasıl başarabilirim? Çift tırnak içinde dizelerle listelemek için dizeleri tek tırnak işareti ile nasıl dönüştürebilirim?

cevap

0

Listelerinizi, istediğiniz gibi biçimlendirmek için şablonunuzda özel bir filtre işlevi kullanabilirsiniz. Biçimlendirmek istediğiniz herhangi bir liste için bu işlevi kullanabilirsiniz.

"objectName": "{{ Application.Hosts|format_list }}", 
: is available here

Sonra json şablon böyle filtreyi kullanabilirsiniz bir jinja2 filtresi oluşturma konusunda bazı büyük bilgi ile iyi bir SO soru/cevap bir iterable ile kullanımı

(örn listenizi)

Filtreniz büyük olasılıkla böyle bir şey yapacağını:

def format_list(my_list): 
    formatted_list = ", ".join(["%s" % item for item in my_list]) 
    return "[%s]" % formatted_list 
+0

yapmak gerekmez? sample.json.templete dosyası içinde? Python dosyanıza – user2942227

+0

- template.render'ı çağırmadan önce tanımlamanız ve jinja'nın env'sine eklemeniz gerekir. Bağlandığım cevabın, bu şeylerin tam bir örneği var. – srowland

0

Bu

çalışacak Ben bu işlevi tanımlarsınız nereye 0
["{{Application.Hosts|join('","')}}"] 

Biz herhangi bir özel filtreler