2015-09-25 38 views
1

我目前正致力於製作一個Python代碼生成器來快速模擬django項目。jinja2在字典中訪問嵌套列表

我有一個xml文件,其中包含所有的模型數據。從那裏它將消失並用jinja2模擬模型,通用視圖,模板等。

我很努力地讓忍者訪問嵌套列表裏面的字典。

code_gen.py

models = {} 

    tree = ET.parse('models.xml') 
    root = tree.getroot() 

    for child in root: 
     models[child.tag] = [] 
     for c in child: 
      models[child.tag].append(c.tag) 

    print models 

    t = Template("""from django.db import models 

    {% for class in model %} 
    class {{ class }}(models.Model): 
     {% for occurrence in occurrences %}{{ occurrence }}{% endfor %} 
    {% endfor %} 
    """) 

    i = t.render(model=models) 

    fo = open('test.py', 'wb') 
    fo.write(i) 
    fo.close() 

models.xml

<?xml version="1.0" encoding="UTF-8"?> 

<Models> 
    <Model1> 
     <CharField max_length="10" null="True" blank="True">Firstname</CharField> 
     <IntegerFieldnull null="True" blank="True">age</IntegerField> 
    </Model1> 
    <Model2> 
     <EmailField max_length="10" null="True" blank="True">email</EmailField> 
     <DateField null="True" blank="True">DOB</DateField> 
    </Model2> 
</Models> 

如果我打印出來的模型,我得到:

{'Model2': ['EmailField', 'DateField'], 'Model1': ['CharField', 'IntegerField']} 

當我把它添加到模板中我得到的類名字,但沒有一個領域。

回答

3

問題是你使用的是{% for occurrence in occurrences %},但是你沒有在任何地方設置occurrences

最簡單的修復方法是循環查看字典中的項目,然後同時獲取關鍵字(模型)和值(字段列表)。

{% for class, occurences in model.items() %} 
class {{ class }}(models.Model): 
    {% for occurrence in occurrences %}{{ occurrence }}{% endfor %} 
{% endfor %} 
+0

完美謝謝 – Mantis