9
You can pass username into url
regexp args and get request user from request
class:
view:
def user_page(request, username):
try:
user = User.objects.get(username=username)
except User.DoesNotExists:
raise Http404
# or use shortcut get_object_or_404(User, username=username)
if request.user.username != user.username:
raise Http404
return render(request, 'templates/user_template', {'user':user})
urls:
url(r'^(?<username>\w+)/page/$', views.user_page, name='user_page')
Note: username
field not valid choice, if it not unique, it will produce an error when you get more then one user from User.objects.get()
. Better use pk
field for user page lookup.
But there is simpler way for building user page for request user. Just one url without keyword arguments, which response data for authenticated user:
view:
def user_page(request):
user = None
if request.user.is_authenticated():
user = User.objects.get(pk=request.user.pk)
return render(request, 'templates/user_template', {'user': user} )
urls:
url(r'^page/$', views.user_page, name='user_page')
Now it return data based on request user or None
if user is not authenticated
Source:stackexchange.com