DJANGO呼叫另一个用户的个人资料

时间:2012-04-18 19:56:16

标签: django profile

我熟悉调用当前登录的用户,使用:requestcontext,user和get_profile。
如果我要创建另一个页面而不是当前登录的用户该怎么办?

我的网址是:

r'^/profile/(\w+)/$' 

和观点如下:

from django.contrib.auth.models import User

def profile(request, username):
    person = User.objects.filter(username=username)
    return render_to_response('profile.html', {"person":person}, 
         context_instance=RequestContext(request))

在我的模板中,我可以输入{{user.username}}或{{user.get_profile.name}}并获取值,但不能输入{{person.username}}或{{person.get_profile.name}} 。有什么方法可以检索我需要的信息?提前谢谢。

2 个答案:

答案 0 :(得分:2)

.filter会返回一个列表,即使它只有一个匹配项。由于您只需要一个用户名,因此请使用.get(username=username),而您的人最终只会使用一个对象。

答案 1 :(得分:1)

您应该查看Django文档中的Retrieving objects。返回QuerySets的方法:

方法.all()

  

all()方法返回一个QuerySet中的所有对象   数据库中。

>> users = User.objects.all()
>> type(users) # This is a QuerySet, not a User object
<class 'django.db.models.query.QuerySet'>

方法.filter()和exclude()

  

过滤(** kwargs)
  返回包含匹配对象的新QuerySet   给定的查找参数。

     

排除(** kwargs)
  返回包含与给定查找参数不匹配的对象的新QuerySet。

>> users = User.objects.filter(username=username)
>> type(users) # This is a QuerySet, not a User object
<class 'django.db.models.query.QuerySet'>

>> users = User.objects.exclude(username=username)
>> type(users) # This is a QuerySet, not a User object
<class 'django.db.models.query.QuerySet'>

现在,如果你看一下Methods that do not return QuerySets

这是您需要使用的:

方法.get()

  

得到(** kwargs)
  返回与给定查找参数匹配的对象,该参数应采用字段查找中描述的格式。

>> users = User.objects.exclude(username=username)
>> type(users) # This is a User object
<class 'YourProject.YourApp.models.User'>