【问题标题】:Receiving a Memory Address from a For Loop从 For 循环接收内存地址
【发布时间】:2012-08-16 20:53:25
【问题描述】:

基本上,我的数据似乎是从数据库中提取的,但我收到的是地址而不是字符串本身。我试图从数据库中获得的是个人资料页面的 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 %}

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

【问题讨论】:

  • 以下两个答案都是正确的,如果您正在迭代整个实体,您希望显示什么?你想要的是访问我猜的对象的属性......

标签: python google-app-engine jinja2


【解决方案1】:

您还没有为Friend 类定义任何类型的默认表示。所以,Python 会使用默认的对象__repr__ 方法,通常会显示内存位置。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 是的,我一直在从文档中汲取大量数据。最终,我将开始精简我的应用程序。哦,顺便说一句,这是一种荣誉。我觉得有必要感谢你在计算机科学行业所做的一切。干杯!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2016-07-21
      • 2021-07-21
      • 2019-10-09
      相关资源
      最近更新 更多