Frage

Google App Engine-Modelle, likeso:

from google.appengine.ext.db import Model

class M(Model):
    name = db.StringProperty()

Dann in einer Jinja2 Vorlage aus einer Django Ansicht aufgerufen, mit einem in Instanz M übergab als m:

The name of this M is {{ m.name }}.

Wenn m initialisiert wird, ohne name gesetzt wird, wird die folgende gedruckt:

  

Der Name dieses M Keine.

Die bevorzugte und erwartete Ausgabe (und die Ausgabe bei der Verwendung von Django Vorlagen) wäre / ist:

  

Der Name dieses M ist.

Wissen Sie, warum dies geschieht und wie die bevorzugte & erwartete Ausgabe zu bekommen?

War es hilfreich?

Lösung

Sie können auch Jinja2 der „oder“ ...

mit berücksichtigen wollen
The name of this M is {{ m.name or ''}}.

Wenn bool(m.name) == False, wird dies zeigen The name of this M is .


Wenn m.name == False und Sie wollen es als Zeichenfolge angezeigt werden „False“, können Sie Jinja2 des „default“ Filter verwenden:

The name of this M is {{ m.name|default('') }}

Wenn m.name is None, wird dies zeigen The name of this M is .

Wenn m.name == False, wird dies zeigen The name of this M is False.


Wenn Sie die Standardfilter verwenden mögen, und haben noch etwas auf False Auswertung gezeigt als definierte Standardwert, fügt eine zusätzliche param:

The name of this M is {{ m.name|default('', true) }}

Dies sollte genau die gleiche Wirkung wie {{ m.name or '' }} hat.


Sie können alle dieser Informationen finden Sie auf Jinja2 der Builtin Filter Referenz

Andere Tipps

Ich glaube, Sie auf die Antwort treffen sich. Wenn Sie keinen Namen für diese Eigenschaft angeben, wird App Engine als keine zu speichern, nicht „“, so, wenn es gedruckt wird, es wie gedruckt wird „None“. Geben Sie den Standard als „“ und das Problem weggeht, wie Sie gesagt haben.

Was ist, wenn er den Standardwert zu sein, nicht leere Zeichenfolge will?

Ich habe dieses Problem selbst. Ich will nicht leeren String drin. Ich möchte null / Keine / NoneType. Das ist nicht die gleiche wie leere Zeichenkette.

So habe ich die Frage an alle setzen wieder --- Jinja beharrt auf übersetzen „None“. Was soll das?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top