Amr*_* E. 45 python google-app-engine django-templates
我正在编写一个ToDo列表应用程序,以帮助自己开始使用Python.该应用程序在GAE上运行,我将待办事项存储在数据存储中.我想向他们展示每个人的项目,而且他们一个人.问题是该应用程序当前向所有用户显示所有项目,因此我可以看到您所写的内容,并且您可以看到我写的内容.我想把我的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('/')
Run Code Online (Sandbox Code Playgroud)
在我的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>
Run Code Online (Sandbox Code Playgroud)
但我想只向创建它们的用户显示项目.我想过尝试
{% for todo in todos %}
{% ifequal todo.author nickname %}
<input type="checkbox"> {{todo.item}} <hr />
{% endifequal %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
无济于事.该列表显示为空白.我以为是因为todo.author不是字符串.我可以将值读出为字符串,还是可以将对象转换为String?
谢谢!
编辑:这是我的Todo课程
class Todo(db.Model):
author = db.UserProperty()
item = db.StringProperty()
completed = db.BooleanProperty()
date = db.DateTimeProperty(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
将我的作者改为StringProperty会产生什么负面影响吗?也许我可以完全放弃施法.
Jef*_*art 59
在python中,该str()方法类似于toString()其他语言中的方法.它被称为传递对象以转换为字符串作为参数.在内部,它调用__str__()参数对象的方法来获取其字符串表示.
但是,在这种情况下,您要比较UserProperty数据库中的作者,该作者的类型users.User与昵称字符串相对应.您需要在模板中比较nickname作者的属性todo.author.nickname.
在Python中,我们可以使用__str __()methon。
我们可以这样在类中重载它:
class User :
firstName=''
lastName=''
...
def __str__(self):
return self.firstName +" "+self.lastName
Run Code Online (Sandbox Code Playgroud)
而当
print(user)
Run Code Online (Sandbox Code Playgroud)
它将调用函数__str __(self) 并打印firstName和lastName
str() 是等价的。
但是,您应该过滤您的查询。目前您的查询是all()Todo 的。
todos = Todo.all().filter('author = ', users.get_current_user().nickname())
Run Code Online (Sandbox Code Playgroud)
或者
todos = Todo.all().filter('author = ', users.get_current_user())
Run Code Online (Sandbox Code Playgroud)
取决于您在 Todo 模型中定义的作者。AStringProperty或UserProperty。
注意nickname是一种方法。您正在传递方法而不是模板值中的结果。
| 归档时间: |
|
| 查看次数: |
78077 次 |
| 最近记录: |