Wie gebe ich ein dictionary-Objekt jinja2, wo die dict.Schlüssel sind die Token sind die Wörterbuch-Werte sind das was ich anzeigen möchte?

Ich bin ein GAE/Python-Neuling. Ich bin versucht zu Rendern eines jinja2 template, in dem die Vorlage Werte in einem dictionary-Objekt. Ich würde gerne etwas wie das hier tun:

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

wobei token001and token002 sind die Werte des Schlüssel im Wörterbuch.

Denke ich würde der Aufruf so Aussehen:

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

Kann mir jemand sagen, wie ich das erreichen können? Ich habe über tausend Token-Dateien und bis zu ein paar Dutzend Token pro Datei. Es gibt mehrere Sätze von Werten für die gleichen Token in einer Datenbank und die Logik zieht aus einer Reihe von tokens und Wert und legt Sie in ein Wörterbuch, und das ist, was ich übergeben möchten, jinja2 für das rendering.

Kann mir jemand sagen, wie pass ein dictionary-Objekt jinja2, wo der Schlüssel für Wörterbücher sind die template-Token?

Danke für Anregungen oder Hinweise auf eine Lösung.

+++++Editiert-Frage++++++
Ich habe Folgendes versucht und es scheint zu funktionieren bis zu einem gewissen Punkt.

Den Token in der Vorlage-Datei jetzt so Aussehen {{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)

Zumindest bin ich nicht eine Fehlermeldung erhalten, die bis zu diesem Zeitpunkt. Jedoch, wenn ich versuche zu speichern die Ergebnisse in dem folgenden code bekomme ich einen Fehler:

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

Dies führt zu einem Fehler BadValueError: Erwartete str, got u'

Modell für die Daten ist:

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

Eine Sache, die ich bemerkt ist, dass die gerenderte Zeichenfolge enthält \n-überall gab es ein carriage return. Aber, das ganze gerendert text als eine Zeichenfolge zwischen Apostrophe (einfache Anführungszeichen - '). Die template-Datei selbst enthält eine Menge von doppelten Anführungszeichen - "). Ich glaube nicht, dass hat nichts damit zu tun.

Ich habe Häufig beobachtet, Fehlermeldung: Erwartete str, got u", gefolgt von dem text, und ich habe nie herausgefunden, was war, was es ist.

Weitere Vorschläge werden geschätzt.

  • was meinst du, kannst du ein Beispiel geben Wörterbuch, das Sie übergeben möchten in? (auch, bitte ändern Sie Ihre Beispiel-name von dict um etwas anderes, denn dict ist das Wörterbuch Konstruktor, so ist es ein bisschen verwirrend, um zu sehen, beide in es). Der code, den Sie haben, bis es jetzt wäre nur legen Sie die Werte für den Schlüssel 'token001' und 'token002' in der Ausgabe der Vorlage.
  • dict ist eine sehr schlechte Wahl des Variablennamens, da es ein basic-Typ name in python.
  • Danke für die schnelle Antwort. dict['token001'] = 'dies ist der text, der eingefügt werden soll, für key = token001'; dict['token002'] = 'dies ist der text, der eingefügt werden soll, für key = token002' - es gibt bis zu hundert verschiedene Werte für jedes token in einer Datenbank, aus der Sie gezogen sind, für verschiedene Situationen. Die typische template-Datei kann in ein paar Dutzend tokens. Ich bin offen für die Benutzung jeder Struktur, die die Arbeit für diese situation (nicht Wörterbuch). Vielen Dank für jede Hilfe.
  • lecstor habe mich über die Reine Wörterbuch-Problem und jetzt kann ich nicht bekommen, die Sie an die Arbeit mit dem blob. Sehen bearbeitet ursprüngliche Frage.
  • ist es das blob, das das Problem? wie es klingt, TemplateName. tut TemplateName = str(TemplateName) es beheben?
  • Danke für die Antwort. Wenn ich kommentiere die , FileTxt = bloboutput Zeile, funktioniert es (zumindest kein Fehler). Wenn ich lassen Sie die blob-Anweisung der Fehler beginnt mit BadValueError: Erwartete str, got u'<!--\n TODO: schließlich, diese Vorlage ersetzen kann... (alles nach der got u ist Teil der template-Datei text).
  • Ich fand gerade eine Referenz, die besagt, dass u'string'means unicode. Ich bin nicht sicher, was die Folgen von diesem sind, aber wenigstens kann ich aufhören zu Fragen, was das u ist.
  • sorry, ja, haben Sie versucht, die gleiche Sache mit FileTxt? FileTxt = str(bloboutput)
  • hmm.. das ist vielleicht nicht die beste Idee, selbst wenn es funktioniert.. > Nie und nimmer verwenden, str() auf einem unicode-Zeichenfolgen oder unicode() auf ein byte-string, ohne eine zweite argument die Angabe der Codierung... blog.notdot.net/2010/07/Getting-unicode-right-in-Python

InformationsquelleAutor Bill G. | 2012-08-27
Schreibe einen Kommentar