所以我有一个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)
答案 0 :(得分:2)
从产品的角度来看,您希望为uprofile
和oprofile
保留相同的网址。一个简单的原因是,当我访问我的个人资料并且我想与其他人分享时,我只是复制粘贴网址。
怎么做?
在您的视图中,传递一个标志,帮助您的模板呈现正确的元素。例如,如果用户与正在访问的配置文件相同,则传递一个标记,例如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)