0 votes

Google appengine remplacement de chaîne dans le fichier de modèle

Je suis en train d'utiliser Google App Engine (Python, bien sûr :) ) et j'aimerais faire un remplacement de chaîne dans une string du fichier de modèle.

{% for item in items %}

{{ item.code.replace( '\_', ' ' ) }}

{% endfor %}

Mais cela ne fonctionne pas. Donc, nous ne pouvons pas exécuter autre chose que des vérifications de base dans les modèles d'app engine. Est-ce correct ?


Un autre problème lié est que j'essaie de raccourcir une chaîne et de la rendre disponible dans le modèle.

Chaque objet meuble a un nom et un champ de description plus long. Dans cette vue que je rends, je veux seulement les 50 premiers caractères du champ de description.

J'ai donc essayé quelque chose comme

items = db.GqlQuery( 'select \* from furniture' )

# **modifié : si vous changez la ligne ci-dessus en**
# items = db.GqlQuery( 'select \* from furniture' ).fetch( 1000 )
# la commande .fetch() permet le fonctionnement des propriétés dynamiques!

for item in items :
  item.shortdescr = item.description\[ 0:50 \]

# transmettre les données au modèle pour le rendu
self.response.out.write(
  template.render( 'furnitureAll.html', { 'items' : items } )
)

Le modèle est le suivant

{% for item in items %}

{{ item.name }}

{{ **item.shortdescr** }}

{% endfor %}

Comme cela n'a pas fonctionné, j'ai essayé de modifier la requête Gql pour raccourcir la chaîne. Mais je réalise rapidement que Gql n'est pas comme SQL. J'essaie d'écrire des requêtes comme

select name,LEFT( description, 50 ) from furniture

Avec peu de succès

1voto

Alex Martelli Points 330805

En dehors de l'appel .fetch() sans argument dans votre code, ce qui, selon moi, ne peut pas fonctionner (vous devez TOUJOURS passer un argument à fetch -- le nombre maximal d'entités que vous êtes prêt à récupérer!), je ne parviens pas à reproduire votre problème -- l'attribution d'un nouvel attribut (y compris un obtenu en traitant les existants) à chaque élément fonctionne parfaitement dans mes tests.

Pouvez-vous reproduire s'il vous plaît votre problème observé de manière aussi concise que possible et éditer votre question pour inclure tous les fichiers pertinents s'il vous plaît ? Semble être la seule façon dont nous pourrions vous aider avec votre bogue bizarre observé!

BTW, select name,LEFT( description, 50 ) ou quoi que ce soit NE FONCTIONNERA ÉVIDEMMENT pas en GQL -- GQL, de manière très très explicite, NE prend EN CHARGE que select * pour obtenir des entités complètes, ou select __key__ pour obtenir uniquement les clés des entités -- c'est tout; AUCUNE sélectivité des colonnes dans la sélection, encore moins d'OPÉRATIONS dessus!-)

1voto

Ian Clelland Points 15066

J'ai peu d'expérience avec Google AppEngine, mais je comprends que c'est très étroitement lié à Django. Vos modèles ne contiennent en fait pas de code Python, même si certaines des structures que vous utilisez ressemblent à cela.

Les deux de vos questions devraient être résolues en utilisant des filtres de modèle. S'il s'agissait de Django, j'utiliserais quelque chose comme ceci pour votre deuxième question :

{{ item.description|truncatewords:10 }}

Pour votre première question (remplacement de chaîne), il se peut qu'il n'y ait pas de filtre intégré que vous puissiez utiliser pour cela. Vous devrez écrire le vôtre. Quelque chose comme ceci :

from google.appengine.ext.webapp.template import create_template_register

register = create_template_register()

@register.filter
def replace_underscores(strng):
    return strng.replace('_', ' ')

Ensuite, dans votre modèle, vous pouvez faire ceci :

{{ item.code|replace_underscores }}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X