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

How do I pull information from a field in the admin panel?

我目前正在使用 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"}}

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

我目前已经在我的 login.html 中尝试过 <p>{{ user.get_user_details.avatarfull }}</p> 之类的东西,以及试图拉动这个特定领域的任何其他组合。我不确定该怎么做,如果它是后端而不是 models.py,我该如何选择这个字段?我知道我做错了,有人能给我指出正确的方向吗?

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

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

这不是很方便,因此您可能需要向用户对象添加 属性:

型号:

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 }}" />

如果您还没有声明自定义用户对象,您可以轻松地创建一个模板标签或独立的辅助函数来检索用户的头像。

模板标签:

@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 }}" />