2

我无法意识到我做错了什么。我在 GAE 数据存储中有一些条目。我进口了 Jinja2。我想使用 Jinja2 在页面上显示数据存储条目。我创建了一个快捷函数来调用 Jinja2 渲染函数。它看起来像这样:

def render_template(response, template_name, vars=dict()):
    template_dirs = [os.path.join(root(), globals['templates_root'])]
    env = Environment(loader=FileSystemLoader(template_dirs))
    try:
        template = env.get_template(template_name)
    except TemplateNotFound:
        raise TemplateNotFound(template_name)
    content = template.render(vars)
    response.response.out.write(content)

所以,我唯一需要传递给这个函数的是一个模板文件名和一个带有变量的字典(如果存在)。我这样称呼这个函数:

class MainHandler(webapp.RequestHandler):
    def get(self, *args, **kwargs):
        q = db.GqlQuery("SELECT * FROM Person")
        persons = q.fetch(20)
        utils.render_template(self, 'persons.html', persons)

模型Person看起来像这样,没什么特别的:

class Person(db.Model):
    first_name = db.StringProperty()
    last_name = db.StringProperty()
    birth_date = db.DateProperty()

当我尝试将persons字典传递给 时render_template,它会引发错误:

TypeError: cannot convert dictionary update sequence element #0 to a sequence

它不会渲染。当我将 empty{}作为persons参数传递时,它会呈现,但显然没有我的数据。我做错了什么?我确信我错过了一些小东西,但我不知道到底是什么。谢谢!

4

1 回答 1

2

您将实体列表传递给您的render_template函数,而不是传递字典。尝试类似的东西utils.render_template(self, 'persons.html', {'persons': persons})

于 2011-03-29T15:35:30.300 回答