2

本质上,似乎我的数据是从数据库中提取的,但我收到的是地址而不是字符串本身。我试图从数据库中获得的是个人资料页面(字符串属性)的 3 个朋友的列表。

这是我的数据库类:

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 %}

谁能告诉我为什么我有时会看到这些地址而不是对象本身(即使只是一般情况下)。

4

3 回答 3

4

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

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

于 2012-08-16T21:00:26.943 回答
3

在您看来,您正在返回作为迭代器db.GqlQuery("..")的查询对象,并且您实际上正在打印查询返回的每个实体的默认对象字符串表示形式。

我想你应该friend像这样迭代和访问属性:

{% for friend_tmp in friends %}
    {{friend_tmp.friend}}
    <br>
{%  endfor %}
于 2012-08-16T21:05:13.727 回答
2

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

于 2012-08-17T20:46:42.383 回答