私はPythonを使い始めるのに役立つToDoリストアプリを書いています。アプリはGAEで実行されており、データストアにToDoアイテムを保存しています。みんなのアイテムを一人で展示したいです。問題は、アプリが現在すべてのユーザーにすべてのアイテムを表示しているため、あなたが書いたものが表示され、私が書いたものが表示されることです。todo.authorオブジェクトを文字列にキャストし、それがユーザーの名前と一致するかどうかを確認することは良いスタートだと思いましたが、その方法がわかりません。
これは私の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('/')
私のindex.htmlには、もともとこれがありました。
<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>
ただし、アイテムを作成したユーザーにのみ表示したいのですが。やってみようと思った
{% for todo in todos %}
{% ifequal todo.author nickname %}
<input type="checkbox"> {{todo.item}} <hr />
{% endifequal %}
{% endfor %}
無駄に。リストは空白になります。todo.authorが文字列ではないからだと思いました。値を文字列として読み取ることはできますか、それともオブジェクトを文字列にキャストできますか?
ありがとう!
編集:これが私のTodoクラスです
class Todo(db.Model):
author = db.UserProperty()
item = db.StringProperty()
completed = db.BooleanProperty()
date = db.DateTimeProperty(auto_now_add=True)
著者をStringPropertyに変更すると、何か悪影響がありますか?たぶん私はキャストを完全にやめることができます。
TemplateSyntaxError: Could not parse the remainder: '(todo.author)' from 'str(todo.author)'
。アイデアはありますか?