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