从For循环接收内存地址

时间:2012-08-16 20:53:26

标签: python google-app-engine jinja2

基本上,似乎我的数据是从数据库中提取的,但我收到的是地址而不是字符串本身。我想从db获取的是一个3个朋友的列表页面列表(stringproperties)。

这是我的db类:

class Friends(db.Model):
    name = db.StringProperty(required = True)
    friend = db.StringProperty()
    added_date = db.DateTimeProperty(auto_now_add = True)

我的个人资料处理程序:

class Profile(MainHandler):
    def get(self, profile_id):
        if self.user and profile_id:
            current_user = self.user.name
            name1 = ''
            friend_name = ''
            team_imagee = ''
            key = ''
            imgs  = db.GqlQuery("select * from Profile_Images WHERE name =:1", profile_id)
            team_name  = db.GqlQuery("select * from Teams WHERE name =:1", profile_id)
            team_images  = db.GqlQuery("select * from Teamimg WHERE user =:1", profile_id)
            friends  = db.GqlQuery("select * from Friends WHERE name =:1 order by added_date desc limit 10", profile_id)
            for clan in team_name:
                    name1 = clan.team_name_anycase
            for image in team_images:
                team_imagee = image.key()
            for img in imgs:
                key = img.key()
            self.render('profile.html', profile_id = profile_id,  current_user = current_user, friends = friends, team_img = team_imagee, team_name = name1, profile_image = key, username = self.user.name, email = self.user.email, firstname = self.user.first_name, last_name = self.user.last_name, country = self.user.country)
        else:
            self.redirect('/register')

我模板中的for循环:

{% for friend in friends %}
    {{friend}}
    <br>
{%  endfor %}

有人会非常友善地告诉我为什么我有时会看到这些地址而不是对象本身(即使只是一般)。

3 个答案:

答案 0 :(得分:4)

您尚未为Friend类定义任何类型的默认表示。因此,Python将使用默认对象__repr__方法,该方法通常显示内存位置。

在模型上定义一个__unicode__方法,该方法返回您实际想要显示的字符串 - 它可能与return self.name一样简单。

答案 1 :(得分:3)

在您的视图中,您将返回db.GqlQuery("..") friend查询对象,并且您实际上正在打印查询返回的每个实体的默认对象字符串表示。

我想您应该迭代并访问{% for friend_tmp in friends %} {{friend_tmp.friend}} <br> {% endfor %} 属性,如下所示:

{{1}}

答案 2 :(得分:2)

如果你要使用NDB,repr(朋友)会更有帮助。