我正在尝试设置一个包含对象列表,对象属性名称和对象属性值的调试页面。我试图获取特定对象类型的特定属性的值。我在编码时都不知道对象类型或属性。
以下是我得到的相关章节:
在我的test.py
中if self.request.get('objID'):
qGet = self.request.get
thisObj = db.get(db.Key(qGet('objID')))
template_values = { 'thisObj' : thisObj }
template = JINJA_ENVIRONMENT.get_template('objProp.html')
self.response.write(template.render(template_values))
和我的objProp.html模板
{% if thisObj %}
<ul>List of properties
{% for p in thisObj.properties() %}
<li>{{ p }} : {{ thisObj.p }}</li>
{% endfor %}
</ul>
{% endif %}
然而,由于thisObj中没有属性p,它总是打印出一个空值,实际上我想要打印出p在循环中特定点引用的属性值
非常感谢任何帮助!
答案 0 :(得分:1)
这是我开始工作的一种方法。我不会接受它,因为我还没有卖掉,因为它是一种“好”的方法。
另请参阅:Google App Engine: how can I programmatically access the properties of my Model class?
这个问题让我大部分都在那里,这就是我正在使用的东西,它似乎运作正常:
{% if thisObj %}
<ul>List of properties
{% for p in thisObj.properties() %}
<li>{{ p }} : {{ thisObj.properties()[p].get_value_for_datastore(thisObj) }}</li>
{% endfor %}
</ul>
{% endif %}
似乎p正在以字符串形式解析,thisObj.properties()[p]
正在返回object属性,然后我只需要使用.get_value_for_datastore(thisObj)
参考文档:The Property Class
答案 1 :(得分:0)
您不应该使用thisObj.p
,因为您没有在thisObj
中查找名称。此实例中的.p
不是循环中的p,而是尝试引用名为“p”的属性或方法。
你应该使用
getattr(thisObj,p)