J'écris une application de liste ToDo pour m'aider à démarrer avec Python. L'application fonctionne sur GAE et je stocke des éléments à faire dans le magasin de données. Je veux leur montrer les objets de tout le monde, et eux seuls. Le problème est que l'application affiche actuellement tous les éléments à tous les utilisateurs, afin que je puisse voir ce que vous écrivez et que vous voyez ce que j'écris. Je pensais que convertir mon objet todo.author en une chaîne et voir s'il correspond au nom de l'utilisateur serait un bon début, mais je ne peux pas comprendre comment faire cela.
C'est ce que j'ai dans mon main.py
...
user = users.get_current_user()
if user:
nickname = user.nickname()
todos = Todo.all()
template_values = {'nickname':nickname, 'todos':todos}
...
def post(self):
todo = Todo()
todo.author = users.get_current_user()
todo.item = self.request.get("item")
todo.completed = False
todo.put()
self.redirect('/')
Dans mon index.html j'avais ceci à l'origine:
<input type="text" name="item" class="form-prop" placeholder="What needs to be done?" required/>
...
<ul>
{% for todo in todos %}
<input type="checkbox"> {{todo.item}} <hr />
{% endfor %}
</ul>
mais j'aimerais afficher les éléments uniquement à l'utilisateur qui les a créés. J'ai pensé essayer
{% for todo in todos %}
{% ifequal todo.author nickname %}
<input type="checkbox"> {{todo.item}} <hr />
{% endifequal %}
{% endfor %}
en vain. La liste est vide. J'ai supposé que c'était parce que todo.author n'est pas une chaîne. Puis-je lire la valeur sous forme de chaîne ou puis-je convertir l'objet en chaîne?
Merci!
Edit: Voici ma classe Todo
class Todo(db.Model):
author = db.UserProperty()
item = db.StringProperty()
completed = db.BooleanProperty()
date = db.DateTimeProperty(auto_now_add=True)
Le fait de changer mon auteur en StringProperty aura-t-il un effet négatif? Peut-être que je peux renoncer complètement au casting.
TemplateSyntaxError: Could not parse the remainder: '(todo.author)' from 'str(todo.author)'
des idées?