在django中以另一个用户身份查看个人资料页面

时间:2016-12-13 15:48:15

标签: django django-views

所以我有一个my user profile视图,你可以看作是登录用户。我想添加第二个视图,以便其他登录用户也可以访问个人资料页面,但我不确定我是否正确地执行此操作

urls.py

url(r'^accounts/profile/', main_views.uprofile, name='uprofile'), #the page you see as my profile
    url(r'^profile/(?P<pk>\d+)/$', main_views.oprofile, name='oprofile'), # the page i use so other users can view the profile page
    url(r'^accounts/update/(?P<pk>\d+)/', User_Profile_views.edit_user, name='edit_user'), #Custom update profile page

main_views.py

@login_required(login_url='/accounts/login/')
def uprofile (request):

    context = locals()  
    template = 'profile.html'
    return render (request, template, context)

def oprofile (request, pk):
    user = User.objects.get(pk=pk)

    context = locals()  
    template = 'profile.html'
    return render (request, template, context)

1 个答案:

答案 0 :(得分:2)

从产品的角度来看,您希望为uprofileoprofile保留相同的网址。一个简单的原因是,当我访问我的个人资料并且我想与其他人分享时,我只是复制粘贴网址。

怎么做?

在您的视图中,传递一个标志,帮助您的模板呈现正确的元素。例如,如果用户与正在访问的配置文件相同,则传递一个标记,例如editable,并使用它来显示编辑按钮。而不是两个视图,您可以拥有单一视图。

此外,人们倾向于记住他们的用户名/句柄,而不是id。所以拥有用户名会更好。但是,请确保您拥有所有用户的唯一用户名。

urls.py

url(r'^profile/(?P<username>[\w\-]+)/$', main_views.profile, name='profile'),

<强> views.py

def profile (request, username):
    # If no such user exists raise 404
    try:
        user = User.objects.get(username=username)
    except:
        raise Http404

    # Flag that determines if we should show editable elements in template
    editable = False
    # Handling non authenticated user for obvious reasons
    if request.user.is_authenticated() and request.user == user:
        editable = True

    context = locals()
    template = 'profile.html'
    return render (request, template, context)