Невозможно отобразить данные из хранилища данных GAE с помощью Jinja2 - PullRequest
2 голосов
/ 29 марта 2011

Я не могу понять, что я делаю неправильно. У меня есть некоторые записи в хранилище данных 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

И это не делает. Когда я передаю пустой {} в качестве аргумента persons, он рендерится, но, очевидно, без моих данных. Что я делаю не так? Я уверен, что есть кое-что маленькое, что я пропустил, но я понятия не имею, что именно. Спасибо!

1 Ответ

2 голосов
/ 29 марта 2011

Вы передаете список сущностей вашей функции render_template вместо передачи диктата.Попробуйте что-то вроде utils.render_template(self, 'persons.html', {'persons': persons})

...