我是 GAE 和 python 的新手。挑战在于使用例如 3 级标识进行嵌套评论。GAE-datastore 为我们做了一半的工作。它以所需的方式存储和输出嵌套结构。所以让例子非常简单:
- 家长 1
- 父母 1 的孩子 1
- 父母 1 的孩子 2
- 孩子 1 的孩子 2
- 孩子 2 的孩子 2
- 家长 2
- 父母 2 的孩子 1
- 孩子 1 的孩子 1
- 父母 2 的孩子 2
- 孩子 1 的孩子 2
- 父母 2 的孩子 1
如果我们将此层次结构保留在数据存储中(通过在创建实体时正确使用属性“父”),我们将能够获取已经以这种方式排序的实体列表:
父 1
子 1 父 1
子 2 父 1
子 1 子 2
孩子 2 的孩子 2
父母 2的
孩子 1 父母 2
的孩子 1 孩子 1 的
孩子 2 父母 2
的孩子 1 孩子 2
所以我们所需要的只是做出正确的识别。换句话说,我们需要为每个项目向我们的模板传递一个参数。让我们将此参数称为 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 值分配的。需要帮助列表,因为模型是 MyModel 类的实例,用于将数据保存在数据存储中并且没有“ident”属性。
所以问题是:有没有更优雅的方式来做同样的事情?