django nom d'utilisateur dans l'url, au lieu de l'id
dans une mini-communauté virtuelle, j'ai un profile_view fonction, de sorte que je peux afficher le profil d'un utilisateur inscrit. La vue de profil de la fonction a comme paramètre l'id de l'utilisateur dont le profil appartient à, de sorte que lorsque je veux accéder au profil de l'utilisateur 2 par exemple, je l'appelle comme ça:
http://127.0.0.1:8000/accounts/profile_view/2/
Mon problème est que je voudrais avoir le nom d'utilisateur dans l'url, et PAS l'id.
J'ai essayer de modifier mon code comme suit, mais il ne fonctionne pas toujours. Voici mon code:
vue:
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))
et mon url:
urlpatterns = patterns('',
url(r'^profile_view/(?P<user>\d+)/$',
profile_view,
name='profile_view'),
merci d'avance!
OriginalL'auteur dana | 2010-06-10
Vous devez vous connecter pour publier un commentaire.
Vous ne vous montrez pas ce que vous avez essayé, ou si vous éprouvez des difficultés. C'est assez simple, il suffit de passer une chaîne du nom d'utilisateur de la fonction au lieu d'un entier, et regardez vers le haut.
et modifier votre url pour permettre à des chaînes de caractères plutôt que des nombres entiers:
Que faire si le nom d'utilisateur est un mail, et vous ne voulez pas que cette info soit publique? Vous pouvez utiliser de l'utilisateur prénom et nom de famille, mais cela pourrait être dupliqué, donc je pense que nous devrions ajouter un ID ou une table de hachage sur l'ID.
OriginalL'auteur Daniel Roseman
Voici comment je le fais à l'aide de classes génériques, les vues et les limaces. Il est étonnamment facile et ne nécessite que quelques lignes de code avec l'aide de limaces.
Maintenant, vous pouvez accéder à la fois à l'utilisateur comme
accounts/profile/id/123/
ainsi queaccounts/profile/username/gertvdijk/
.Ce qui se passe ici?
pk
URL paramètre est omis et remplacé parslug
dans le modèle d'URL. C'est accepté par la vue, parce que...User.username
par l'utilisation demodel = User
etslug_field = "username"
. (docs)pk
paramètre.Comment faites-vous cela dans le cas des s'étend de l'Utilisateur pour l'Utilisateur (vous savez pour obtenir plus de champs pour un utilisateur). Le modèle de l'Utilisateur a le champ 'nom utilisateur', mais le UserProfile modèle de personnaliser les champs que je wan pour montrer trop.
C'est assez simple... changer le
model
et laslug_field
. Fonctionne avec tous les Django modèle, cette recette, et pas seulement avecUser
s.OriginalL'auteur gertvdijk
Ajouter dans le haut du fichier:
et remplacer
avec
où connexion est le champ nom d'utilisateur de l'Utilisateur modèle.
Remplacer login avec le nom du champ nom d'utilisateur. Je ne sais pas comment ça s'appelle. Aussi regarder les autres réponses et corriger l'url.
oui, c'est ça! 🙂 merci!
OriginalL'auteur culebrón
Pour Django 2.0 et au-dessus:
OriginalL'auteur Emmanuel Caster
Dans urls.py
Avec la classe de base point de vue.
Je l'ai testé dans Django 2.1.
OriginalL'auteur Shahjalal