Piszę aplikację z listą zadań do zrobienia, aby pomóc sobie w rozpoczęciu pracy z Pythonem. Aplikacja działa w GAE i przechowuję elementy do wykonania w magazynie danych. Chcę pokazać im wszystkie przedmioty i tylko jemu. Problem w tym, że aplikacja wyświetla obecnie wszystkie pozycje wszystkim użytkownikom, więc ja widzę, co piszesz, a ty widzisz, co piszę. Pomyślałem, że rzutowanie obiektu todo.author na łańcuch i sprawdzenie, czy pasuje do nazwy użytkownika, byłoby dobrym początkiem, ale nie wiem, jak to zrobić.
To jest to, co mam w moim 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('/')
W moim index.html miałem to pierwotnie:
<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>
ale chciałbym wyświetlać elementy tylko użytkownikowi, który je utworzył. Myślałem, żeby spróbować
{% for todo in todos %}
{% ifequal todo.author nickname %}
<input type="checkbox"> {{todo.item}} <hr />
{% endifequal %}
{% endfor %}
bezskutecznie. Lista jest pusta. Założyłem, że dzieje się tak, ponieważ autor todo.autor nie jest ciągiem znaków. Czy mogę odczytać wartość jako ciąg, czy mogę rzutować obiekt na String?
Dzięki!
Edycja: Oto moja klasa Todo
class Todo(db.Model):
author = db.UserProperty()
item = db.StringProperty()
completed = db.BooleanProperty()
date = db.DateTimeProperty(auto_now_add=True)
Czy zmiana autora na StringProperty wpłynie na coś negatywnego? Może mogę całkowicie zrezygnować z castingu.
TemplateSyntaxError: Could not parse the remainder: '(todo.author)' from 'str(todo.author)'
jakieś pomysły?