0

我熟悉调用当前登录的用户,使用: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}}。有什么方法可以检索我需要的信息?先感谢您。

4

2 回答 2

2

.filter返回一个列表,即使它只有一个匹配项。由于您正在寻找一个用户名,请使用.get(username=username),您的人最终将只得到一个对象。

于 2012-04-18T19:59:57.283 回答
1

您应该查看 Django 文档中的检索对象。返回查询集的方法:

方法 .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()

filter(**kwargs)
返回一个新的 QuerySet,其中包含与给定查找参数匹配的对象。

exclude(**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'>

现在,如果您查看不返回 QuerySets 的方法

这是您需要使用的:

方法 .get()

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

>> users = User.objects.exclude(username=username)
>> type(users) # This is a User object
<class 'YourProject.YourApp.models.User'>
于 2012-04-18T20:31:53.250 回答