2010-04-22 4 views
2

modèles Google App Engine, likeso:Jinja2 retourne la chaîne "Aucun" pour les modèles Google App Engine

from google.appengine.ext.db import Model 

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

Puis dans un modèle Jinja2 appelé d'une vue Django avec une en instance de M passé comme m:

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

Lorsque m est initialisé sans name étant fixé, les éléments suivants sont imprimés:

Le nom de ce M est None.

La sortie préférable et attendu (et la sortie lors de l'utilisation des modèles de Django) sera/est:

Le nom de ce M est.

Savez-vous pourquoi cela se produit et comment obtenir le résultat attendu &?

+0

Il est à noter que la mise en valeur par défaut, ala. 'name = db.StringProperty (default =" ")' résout ce problème. Le problème semble être que 'm.name' est NoneType sauf s'il y a une valeur par défaut. –

+0

Votre classe devrait sous-classer 'db.Model', comme ceci:' class M (db.Model): '- cela change-t-il quelque chose? –

+0

@Jason Hall - Merci pour la capture. Cela ne règle pas le problème, malheureusement. –

Répondre

14

Vous pouvez également envisager d'utiliser Jinja2 de "ou" ...

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

Si bool(m.name) == False, cela montrera The name of this M is .


Si m.name == False et que vous voulez afficher comme la chaîne "False", vous pouvez utiliser le filtre "par défaut" de Jinja2:

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

Si m.name is None, cela montrera The name of this M is .

Si m.name == False, cela montrera The name of this M is False.


Si vous souhaitez utiliser le filtre par défaut et ont encore quelque chose d'évaluer False montré que votre valeur par défaut définie, ajoutez une paramètre supplémentaire:

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

Ceci devrait avoir exactement le même effet que {{ m.name or '' }}.


Vous trouverez toutes ces informations sur Jinja2's Builtin Filters reference

+0

Excellente suggestion; merci, Jgeewax. –

1

Je pense que vous avez trouvé la réponse vous-même. Si vous ne spécifiez pas de nom pour cette propriété, App Engine semble la stocker comme Aucune, pas "", ainsi, lorsqu'elle est imprimée, elle est imprimée comme "Aucune". Spécifiez la valeur par défaut "" et votre problème disparaît, comme vous l'avez dit. Que se passe-t-il s'il ne veut pas que la chaîne vide soit la valeur par défaut?

+0

Il est intéressant de noter que vous pourrez peut-être remédier à ce problème en bricolant avec 'class jinja2.Undefined'. –

1

J'ai moi-même ce problème. Je ne veux pas de chaîne vide là-dedans. Je veux null/None/NoneType. Ce n'est pas la même chose que la chaîne vide.

Alors j'ai remis la question à tout le monde --- Jinja insiste pour traduire "Aucun". Ce qui donne?

+0

Je pense que vous pouvez résoudre cela en surchargeant 'jinja2.Undefined' et en passant cela comme paramètre' undefined' à votre 'jinja2.Environment'. –

+0

essayer d'utiliser Jinja filtre "par défaut" – uralbash