Python 通过Expando迭代';Django模板中的动态属性

Python 通过Expando迭代';Django模板中的动态属性,python,google-app-engine,templates,iteration,expando,Python,Google App Engine,Templates,Iteration,Expando,我试图遍历Expando模型的动态属性,以便将它们全部输出。除了创建自己的方法之外,还有其他方法可以做到这一点吗 class Event(db.Expando): platform = db.ReferenceProperty(Platform) date = db.DateTimeProperty() def getValues(self): return self._dynamic_properties 然后在模板中,传递一个“平台”对象: {%

我试图遍历Expando模型的动态属性,以便将它们全部输出。除了创建自己的方法之外,还有其他方法可以做到这一点吗

class Event(db.Expando):
    platform = db.ReferenceProperty(Platform)
    date = db.DateTimeProperty()

    def getValues(self):
        return self._dynamic_properties
然后在模板中,传递一个“平台”对象:

{% for event in platform.event_set %}
    <b>{{ event.date }}</b><br />
    {% for pair in event.getValues.items %}
        {{ pair.0 }} = {{ pair.1 }}<br />
    {% endfor %}
{% endfor %}
{platform.event_set%中的事件的%
{{event.date}}
{event.getValues.items%} {{pair.0}}={{pair.1}}
{%endfor%} {%endfor%}
这是可行的,但我很惊讶我不能这么做:

{% for event in platform.event_set %}
    <b>{{ event.date }}</b><br />
    {% for pair in event.items %}
        {{ pair.0 }} = {{ pair.1 }}<br />
    {% endfor %}
{% endfor %}
{platform.event_set%中的事件的%
{{event.date}}
{event.items%%中的配对为%1} {{pair.0}}={{pair.1}}
{%endfor%} {%endfor%}

没有我自己的方法调用。。。我是否应该使用“.items”以外的内容?

您可以使用db.Model的“dynamic_properties”方法检索Expando的属性,格式与“properties”方法相同(如文档所示)

请记住,这些函数不会返回属性的值,但是…'properties'返回映射到其实现类(在本例中为db.ReferenceProperty和db.DateTimeProperty)的属性名称字典,“dynamic_properties”仅返回属性名称列表,因为Expandos无法将动态值映射到实现类

为了获得属性的值,必须使用
getattr(model,prop\u name)
。没有办法纯粹在Django模板内运行此函数(没有),但是您可以像这样保留并重新编写您的方法

def getExpandoValues(self):
   return dict((name, getattr(self, name)) for name, impl_class in self.dynamic_properties())
。。。然后重新编写模板,通过新的字典输入访问值:

{% for event in platform.event_set %}
  <b>{{ event.date }}</b><br />
  {% for pair in event.getExpandoValues %}
     {{ pair.0 }} = {{ pair.1 }}<br />
  {% endfor %}
{% endfor %}
{platform.event_set%中的事件的%
{{event.date}}
{event.getExpandoValues%中的对为%1} {{pair.0}}={{pair.1}}
{%endfor%} {%endfor%}
事件中对的{%for.\u dynamic\u properties.items%}不起作用吗?否;有人提出了这一建议,但答案已被撤回。无法访问以下划线开头的属性。为这个建议干杯。