2013-08-18 2 views
0

J'utilise Google App Engine 1.8.3 - API Python 2.7 et NDB comme mon datastoreGoogle App Engine - la mise à jour d'une entité

Supposons que j'ai une liste des entités du groupe affichées sur une table html. Et je veux cliquer sur le nom d'un groupe individuel pour éditer les informations du groupe. Quelle devrait être la clé/identifiant de ce groupe, lequel dois-je utiliser? S'il vous plaît jeter un oeil à ci-dessous

Voici mon modèle:

class Group(ndb.Model): 
    name = ndb.StringProperty() 
    description = ndb.StringProperty() 

Dans mon html:

...... 
{% for group in groups %} 
    <tr> 
     <td> 
     <a href="/editGroup?id={{ ????????????? }}" {{ group.name}} </a> 
     </td> 
     <td> 
     {{ group.description}} 
     </td> 
    </tr> 
{% endfor %} 
...... 

Dans le ????? à l'intérieur de l'étiquette <a>, que dois-je mettre? Que dois-je transmettre au serveur? group.key? group.key.id()? ou je dois ajouter le modèle Property to Group comme propriété clé comme groupId = ndb.IntegerProperty()?

Je songe à utiliser la clé de l'entité, mais je n'ai pas trouvé le moyen d'afficher la clé dans le fichier html à partir de 'group', comme group.something_to_get_the_key().

J'ai été en mesure d'obtenir l'ID numérique en utilisant group.key.id(), mais selon https://developers.google.com/appengine/docs/python/ndb/entities#numeric_keys les ID numériques peuvent ne pas être uniques.

Merci

Répondre

2

En NDB, les touches ont une méthode urlsafe() qui produit une chaîne adaptée pour une utilisation dans les modèles et le passage aux URL:

{{ group.key.urlsafe }} 

Ceci est documenté sur la même page que vous liez déjà.

+0

Notez que s'il s'agit d'un template jinja2, il devra être group.key.urlsafe(), avec les parenthèses. – Greg

+0

En outre, il peut être intéressant d'utiliser 'url_for()' à la place d'un chemin d'URL avec un identifiant. Vous auriez une fonction 'edit_group (group_id)', décorée avec un '@route ('/ editGroup/')', et ensuite vous inséreriez dans votre template '{{url_for ('edit_group', group_id = group.key.id())}} '. Ce qui est à la fois plus flexible, plus élégant et peut fournir une meilleure syntaxe de chemins. C'est Flask, mais j'entends que Django a récemment adopté ce schéma de route. – patb

Questions connexes