我目前正在使用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,我如何选择这个字段?我知道如果有人指出我朝着正确的方向发展,那我就错了吗?
答案 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 }}" />
如果您尚未声明自定义用户对象,则可以轻松创建模板标签或独立帮助程序功能以从用户检索头像。
@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 }}" />