这是我的代码:
def callback(req):
token = req.session.get('token', None)
if not token:
return render_to_response('callback.html', {
'token': True
})
token = oauth.OAuthToken.from_string(token)
if token.key != req.GET.get('oauth_token', 'no-token'):
return render_to_response('callback.html', {
'mismatch': True
})
token = get_authorized_token(token)
# Actually login
obj = is_authorized(token)
if obj is None:
return render_to_response('callback.html', {
'username': True
})
try: user = User.objects.get(username=obj['screen_name'])
except: user = User(username=obj['screen_name'])
user.oauth_token = token.key
user.oauth_token_secret = token.secret
user.save()
req.session['user_id'] = user.id
del req.session['token']
s = ''.join('%s: %s </br>' % (a, getattr(user, a)) for a in dir(user))
return HttpResponse(s)
我希望使用
s = ''.join('%s: %s </br>' % (a, getattr(user, a)) for a in dir(user))
return HttpResponse(s)
显示用户的属性
但是我收到了一个错误:
AttributeError at /twitter/login/callback/
Manager isn't accessible via User instances
所以我该怎么做,
感谢
答案 0 :(得分:0)
更简洁的方法是在模型中添加一个内省的方法。
请参阅Django templates: loop through and print all available properties of an object?
以及Iterate over model instance field names and values in template
答案 1 :(得分:0)
您应该使用for循环进行故障排除并找出问题所在!
我浏览了User
个对象,发现它不喜欢getattr(user, '_base_manager')
或getattr(user, 'objects')
你只是想要字段,或者真的所有与用户对象相关的python代码?
如果您只想要models.py中定义的字段:
for field in user._Meta.fields:
print '%s: %s' % (field.name, field.value_to_string(user))
如果你想要dir所做的所有魔法
只需做一个正常的循环。列表推导不会更容易捕获异常。
for attr in dir(user):
try:
print '%s: %s' % (attr, getattr(user, attr))
except Exception, e:
print '%s: %s' % (attr, e)
如果你非常喜欢你的列表理解
def no_exception_getattr(user, attr):
try:
return getattr(user, attr)
except Exception, e:
return e
''.join(['%s: %s' % (x, no_exception_getattr(user, x)) for x in dir(user)])