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)

どうすればこれを達成できるか教えてもらえますか? 1,000 個を超えるトークン化されたファイルがあり、ファイルごとに最大数十個のトークンがあります。データベースには同じトークンに対して複数の値のセットがあり、ロジックはトークンと値の 1 つのセットを取り出して辞書に入れます。これが、レンダリングのために 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")

私が気づいたことの 1 つは、レンダリングされた文字列には、キャリッジ リターンがあるすべての場所に \n が含まれていることです。ただし、表示されるテキスト全体は、アポストロフィ (単一引用符 - ') で囲まれた文字列です。テンプレート ファイル自体には、多くの二重引用符が含まれています - "。それとは何の関係もないと思います。

私は頻繁にエラーメッセージを見てきました: 予期された 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 に答える