如何从管理面板中的字段中提取信息?

时间:2015-05-22 12:58:58

标签: python django django-socialauth

我目前正在使用Django 1.8和Python 3.我正在使用Python-social-auth让人们通过steam id登录,而我正在使用 SOCIAL_AUTH_STEAM_EXTRA_DATA = ['player'] 设置。在管理面板中,您会看到一个显示额外数据的字段。它存储这样的信息

{"player": {"profileurl": "http://steamcommunity.com/profiles/76561198039465340/", "personaname": "Khailz | Daisuki <3", "avatarmedium": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/9c/9cce70b919de60669303d057446fbf563221133a_medium.jpg", "steamid": "76561198039465340", "avatarfull": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/9c/9cce70b919de60669303d057446fbf563221133a_full.jpg"}}

我想要做的是在用户登录时提取avatarfull数据并将其放入我的模板中。

我目前在我的login.html中尝试过类似<p>{{ user.get_user_details.avatarfull }}</p>的内容,以及试图拉动此特定字段的任何其他组合。我不知道如何解决这个问题,如果它是后端而不是models.py,我如何选择这个字段?我知道如果有人指出我朝着正确的方向发展,那我就错了吗?

1 个答案:

答案 0 :(得分:1)

未经测试,但我认为正确的路径是:

user.social_auth.get(
    provider='steam'
).extra_data.player.avatarfull

这不是很方便,因此您可能希望向User对象添加属性:

模型:

class MyUser(models.Model):
    # regular stuff

    @property
    def get_avatar_url(self):
        try:
            return self.social_auth.get(
                provider='steam'
            ).extra_data.player.avatarfull
        except (UserSocialAuth.DoesNotExist, AttributeError):
            return 'http://placehold.it/64x64'

模板:

<img src="{{ user.get_avatar_url }}" />

如果您尚未声明自定义用户对象,则可以轻松创建模板标签或独立帮助程序功能以从用户检索头像。

templatetag:

@register.filter
def get_avatar_url(user):
    try:
        return user.social_auth.get(
            provider='steam'
        ).extra_data.player.avatarfull
    except (UserSocialAuth.DoesNotExist, AttributeError):
        return 'http://placehold.it/64x64'

模板:

<img src="{{ user|get_avatar_url }}" />