我是GAE和python的新手。挑战在于使用例如3个标识级别进行嵌套注释。 GAE-datastore为我们工作了一半。它以所需的方式存储和输出嵌套结构。 所以举个例子很简单:
如果我们将此层次结构保留在数据存储区中(通过在创建实体时使用属性“parent”),我们将能够获取已经按这种方式排序的实体列表:
家长1
父母1的孩子1
父母1的孩子2
2孩子1
2岁儿童2
家长2
父母2的孩子1
孩子1的孩子1
父母2的孩子2
2岁儿童1
所以我们所需要的只是做出正确的认同。换句话说,我们需要将参数传递给每个项目的模板。我们称这个参数为0,1,2。我有解决方案,但我不喜欢它。 我用这种方式计算ident的参数值:
ident_value = len(CURREN_ITEM.key().to_path())/2 - 2
(GAE层次结构路径中的每个级别由2个元素组成。)
因此,在从数据存储区获取模型后,此循环正在执行:
for model in model_list:
new_model_list.append(model) # helper list
ident_value = len(model.key().to_path())/2 - 2
if ident_value>3: ident_value = 3 # max ident = 3
setattr(new_model_list[i], 'ident', ident_value )
i += 1
然后new_model_list传递给jinja模板,其中每个项目的类名都是基于model.ident值分配的。 需要帮助程序列表,因为model是MyModel类的实例,用于在数据存储区中保存数据并且没有“ident”属性。
所以问题是:是否有更优雅的方式来做同样的事情?
答案 0 :(得分:0)
我的解决方案,如果有人需要:
def nest (flow, root_rep_id_list, deep = 0):
msglist = []
nested_comments = []
deep += 1
for rep_id in root_rep_id_list:
if rep_id in flow:
msglist.append(flow[rep_id])
for msg in msglist:
nested_comments.append(Nestedobject (msg, nest(flow, msg.replies, deep) if msg.replies else None, deep))
logging.error(msg.replies)
return nested_comments