1

我是 GAE/Python 新手。我正在尝试呈现模板值位于字典对象中的 jinja2 模板。我想做这样的事情:

some markup {{ dict['token001'] }} some more markup {{ dict['token002'] }} etc. 

其中 token001 和 token002 是 Dictionary 中键的值。

我想这个电话看起来像:

template = jinja_environment.get_template(fileName.html)     
outputblob = template.render(dict)

谁能告诉我如何做到这一点?我有超过一千个标记化文件,每个文件最多有几十个标记。数据库中有相同标记的多组值,逻辑提取一组标记和值并将它们放入字典中,这就是我想要传递给 jinja2 进行渲染的内容。

谁能告诉我如何将字典对象传递给 jinja2,其中字典键是模板标记?

感谢您提供任何解决方案的建议或指示。

+++++编辑的问题++++++ 我尝试了以下方法,它似乎正在发挥作用。

模板文件中的标记现在看起来像 {{tokenvals.tkn001}}

    tokenvals = q.fetch(999)
    tokendict = {}
    for tokenval in tokenvals:
        tokendict[tokenval.tknID] = tokenval.tknValue

    template = jinja_environment.get_template('khan-exercise.html')     
    bloboutput = template.render(tokenvals = tokendict)

至少到目前为止我没有收到错误消息。但是,当我尝试将结果保存在以下代码中时,出现错误:

    f = GeneratedFiles(
        TemplateName = TemplateName
        , FileTxt = bloboutput
        , Status = 'Published'
        )
    f.put()

这会导致错误 BadValueError: Expected str, got u'

数据模型为:

class GeneratedFiles(ndb.Model):
  TemplateName = ndb.StringProperty()
  FileTxt = ndb.BlobProperty()
  Status = ndb.StringProperty(default="Pending Translation")

我注意到的一件事是,呈现的字符串在任何有回车的地方都包含 \n 。但是,整个呈现的文本是撇号之间的字符串(单引号 - ')。模板文件本身包含很多双引号 - ")。我认为这与它没有任何关系。

我经常看到错误消息:Expected str, got u' 后跟文本,但我从未弄清楚是什么原因造成的。

任何进一步的建议将不胜感激。

4

1 回答 1

3

你也可以让我们知道什么不适合你。您是否按照您认为的那样尝试调用?什么破了?

我认为这应该工作..

some markup {{ tokens.token001 }} some more markup {{ tokens.token002 }} etc.

tokens = get_tokens_dict()
template = jinja_environment.get_template(fileName.html)     
outputblob = template.render(tokens=tokens)

或者可能..

data = { 'tokens': tokens }
outputblob = template.render(**data)
于 2012-08-28T01:25:03.430 回答