в мини-виртуальном сообществе, у меня есть функция profile_view, так что я могу просмотреть профиль любого зарегистрированного пользователя. Функция просмотра профиля имеет в качестве параметра идентификатор пользователя, которым относится данный профиль, так что, когда я хочу, чтобы получить доступ к профилю пользователя 2, например, я называю это так: http://127.0.0.1:8000/accounts/profile_view/2/имя пользователя django в url, а не id
Моя проблема заключается в том, что я хотел бы иметь имя пользователя в URL-адресе, а НЕ идентификатор. Я пытаюсь изменить свой код следующим образом, но он не работает. Вот мой код:
вид:
def profile_view(request, user):
u = User.objects.get(pk=user)
up = UserProfile.objects.get(created_by = u)
cv = UserProfile.objects.filter(created_by = User.objects.get(pk=user))
blog = New.objects.filter(created_by = u)
replies = Reply.objects.filter(reply_to = blog)
vote = Vote.objects.filter(voted=blog)
following = Relations.objects.filter(initiated_by = u)
follower = Relations.objects.filter(follow = u)
return render_to_response('profile/publicProfile.html', {
'vote': vote,
'u':u,
'up':up,
'cv': cv,
'ing': following.order_by('-date_initiated'),
'er': follower.order_by('-date_follow'),
'list':blog.order_by('-date'),
'replies':replies
},
context_instance=RequestContext(request))
и мой URL:
urlpatterns = patterns('',
url(r'^profile_view/(?P<user>\d+)/$',
profile_view,
name='profile_view'),
спасибо заранее!
на основе того, что я вижу в django/contrib/auth/forms.py. Я думаю, что лучшее регулярное выражение, используемое для захвата имени пользователя, равно (? P [\ w. @ + -] +) –
Что делать, если имя пользователя это электронная почта, и вы не хотите, чтобы эта информация была общедоступной? Вы могли бы использовать имя пользователя и фамилию, но это можно было бы продублировать, поэтому я думаю, что мы должны добавить идентификатор или хэш в идентификаторе. – jobima